home *** CD-ROM | disk | FTP | other *** search
/ Scene Storm / Scene Storm - Volume 1.iso / coding / asm / utils / beermon / mm.s < prev    next >
Text File  |  1980-01-03  |  314KB  |  16,673 lines

  1. ;
  2. ; BeerMon sourcecode, FreeWare
  3. ;
  4. version=46
  5. rev="c"
  6. chksum=$20630d26    ;the value you get in D0 after 'j chkmon'
  7. ;
  8. ; note: use ASM-ONE V1.02 (huuu, why doesn't ODD work correctly?)
  9. ;       or any improved version of it. After assembling, use 'e' to
  10. ;       include that damn brilliant logo :-) bevor saving the executable.
  11. ;
  12. ; you may modify as much as you want, but PLEASE don't rape
  13. ; it corrupt...
  14. ;
  15. ; (C) by Carnivore/BeerMacht, Jun 93 - Blessed are the sick.
  16. ;
  17. ; "With my art I am the fist in the face of god"
  18.  
  19. >extern "beermon.bitmap",dostrkbuf
  20.             
  21. CloseLibrary        = -414
  22. FindResident        = -96
  23. OldOpenLibrary        = -408
  24. OpenLibrary        = -552
  25. Supervisor        = -30
  26.  
  27. Forbid            = -132
  28. GetMsg            = -372
  29. ReplyMsg        = -378
  30. WaitPort        = -384
  31.  
  32. work512        =$074000
  33. work1mb        =$0f4000
  34. work1.5mb    =$174000
  35. work2mb        =$1f4000
  36.  
  37. ddmfmwords=$18d0
  38. hdmfmwords=$18e0*2
  39. xchars=80
  40. xpixel=xchars*8
  41. dsksize=hdmfmwords*2    ;bytes
  42. sprsize=76
  43. copsize=16*4
  44. miscsize=dsksize+sprsize+copsize
  45.  
  46. histnum= 10        ;number of history lines
  47. brkpnum= 10        ;number of breakpoints
  48. mtchnum= 100        ;number of matchbuffer entries
  49. sndintstep=$10
  50. fkeylen=20
  51. retry=3
  52. stepcount    =  3000*100/141        ;stepdelay 3ms
  53. settlecount    = 15000*100/141        ;settledelay 15ms
  54. time1ms        =  1000*100/141        ;disk test intervall 1ms
  55.  
  56. ImploderID = "IMP!"
  57. LF    = 10        ;line feed
  58.  
  59. movec_sfc.d0    = $4e7a0000
  60. movec_dfc.d0    = $4e7a0001
  61. movec_cacr.d0    = $4e7a0002
  62. movec_cacr.d7    = $4e7a7002
  63. movec_cacr.a5    = $4e7ad002
  64. movec_vbr.d0    = $4e7a0801
  65. movec_vbr.a5    = $4e7ad801
  66. movec_caar.d0    = $4e7a0802
  67. movec_caar.a5    = $4e7ad802
  68. movec_msp.a5    = $4e7ad803
  69. movec_urp.a5    = $4e7ad806    ;68040
  70.  
  71. movec_d0.sfc    = $4e7b0000
  72. movec_d0.dfc    = $4e7b0001
  73. movec_d0.cacr    = $4e7b0002
  74. movec_d7.cacr    = $4e7b7002
  75. movec_a5.cacr    = $4e7bd002
  76. movec_a5.vbr    = $4e7bd801
  77. movec_a5.caar    = $4e7bd802
  78.  
  79. cinva_bc    = $f4d8        ;68040
  80. cpusha_bc    = $f4f8        ;68040
  81.  
  82. fmovem_fp0_7.a2 = $f212f0ff
  83. fmovem_a2.fp0_7 = $f212d0ff
  84. fmovem_fpcx.a2  = $f212bc00    ;fpcr/fpsr/fpiar
  85. fmovem_a2.fpcx  = $f2129c00    ;fpcr/fpsr/fpiar
  86. fsave_sp    = $f327
  87. frestore_sp    = $f35f
  88. fmove.x_a3.fp0    = $f2134800    ;fmove.x (a3),fp0
  89. fmove.p_fp0.a3    = $f2136c11    ;fmove.p fp0,(a3){$11}
  90. fmove_fpsr.d1    = $f201a800    ;fmove.l fpsr,d1
  91.  
  92. pmovefd_a0.tt0    = $f0100900    ;long
  93. pmovefd_a0.tt1    = $f0100d00    ;long
  94. pmovefd_a0.tc    = $f0104100    ;long
  95. pmovefd_a0.srp    = $f0104900    ;quad
  96. pmovefd_a0.crp    = $f0104d00    ;quad
  97. pmove_a2.tt0    = $f0120800    ;long
  98. pmove_a2.tt1    = $f0120c00    ;long
  99. pmove_a2.tc    = $f0124000    ;long
  100. pmove_a2.drp    = $f0124400    ;quad    ;68851
  101. pmove_a2.srp    = $f0124800    ;quad
  102. pmove_a2.crp    = $f0124c00    ;quad
  103. pmove_a2.mmusr    = $f0126000    ;word
  104. pmove_tt0.a2    = $f0120a00    ;long
  105. pmove_tt1.a2    = $f0120e00    ;long
  106. pmove_tc.a2    = $f0124200    ;long
  107. pmove_drp.a2    = $f0124600    ;quad    ;68851
  108. pmove_srp.a2    = $f0124a00    ;quad
  109. pmove_crp.a2    = $f0124e00    ;quad
  110. pmove_mmusr.a2    = $f0126200    ;word
  111.  
  112. base=*+$c000
  113. run:    movem.l a6,-(a7)        ;the jmp entry,flags ok
  114.     lea base-$7ffe(pc),a6
  115.     lea $7ffe(a6),a6
  116.     movem.l d0-d7/a0-a5,regs-base(a6)
  117.     sub.l a1,a1            ;'x' resets/returns to cli
  118.     bra.b mutil0
  119.  
  120. thehit:    movem.l a6,-(a7)        ;interrupt entry,flags ok
  121.     lea base-$7ffe(pc),a6
  122.     lea $7ffe(a6),a6
  123.     movem.l d0-d7/a0-a5,regs-base(a6)
  124.     movem.l 4+2(a7),a4        ;the pc
  125.     lea -1.w,a1            ;'x' returns into prg
  126. mutil0:    movem.w a1,frzflag-base(a6)
  127.     movem.l (a7)+,a0        ;a6
  128.     movem.l a0/a7,regs+56-base(a6)    ;a6/a7
  129.  
  130.     lea $bfe000,a1
  131.     lea 3.w,a3            ;don't change any flags
  132.     lea 2.w,a2
  133.     movem.w a3,$0200(a1)        ;$bfe201:lmouse,ovl
  134.     movem.w a2,(a1)            ;$bfe001
  135.  
  136.     lea stackend-$7ffe-base(a6),a3
  137.     lea $7ffe(a3),a7        ;lea $80000,a7 (usp|isp|msp)
  138.     bsr.w getvbr
  139.     move.l a5,vbreg-base(a6)
  140.  
  141.     move.l a7,a3
  142.     lea $10.w,a0        ;illegal vec
  143.     add.l vbreg-base(a6),a0
  144.     move.l (a0),a1        ;old illegal vec
  145.     lea savereg(pc),a2    ;uses d0
  146.     movem.l a2,(a0)            ;?flags ok
  147.     illegal                ;store sr,noint,go sv
  148.     move.l a7,regs+64+4-base(a6)    ;isp
  149.     move usp,a7
  150.     move.l a7,regs+64-base(a6)    ;usp
  151.     move.l a3,a7
  152.  
  153.     tst.b frzflag-base(a6)
  154.     bne.b setpc
  155.     sub.l a4,a4            ;clear pc
  156. setpc:    movem.l a4,regs+64+24-base(a6)    ;pc
  157.  
  158.     lea $de0000,a2
  159.     move.w (a2),timeout-base(a6)
  160.     and.w #$7f7f,(a2)    ;enable timeout, DSACK
  161.  
  162.     lea illtrap(pc),a2
  163.     move.l a2,(a0)
  164.     moveq #0,d6            ;68000
  165.     dc.l movec_vbr.a5         ;68010?
  166.     move.l a5,regs+64+12-base(a6)    ;vbr
  167.     dc.l movec_sfc.d0
  168.     move.b d0,sfcdfc+0-base(a6)
  169.     dc.l movec_dfc.d0
  170.     move.b d0,sfcdfc+1-base(a6)    ;sfcdfc
  171.     moveq #1,d6            ;68010
  172.     dc.l movec_msp.a5        ;68020
  173.     move.l a5,regs+64+8-base(a6)    ;msp
  174.     dc.l movec_cacr.a5
  175.     move.l a5,regs+64+16-base(a6)    ;cacr
  176.     move.l a5,d7
  177.     bset #4,d7
  178.     bclr #0,d7    
  179.     dc.l movec_d7.cacr
  180.     dc.l movec_cacr.d7
  181.     dc.l movec_a5.cacr        ;restore cacr
  182.     moveq #2,d6        ;68020
  183.     btst #4,d7        ;68020/30
  184.     beq.b illt20
  185.     moveq #3,d6        ;68030
  186. illt20:    dc.l movec_urp.a5
  187.     moveq #4,d6        ;68040
  188. illtrap:move.l a3,a7            ;restore isp
  189.     move.l a1,(a0)            ;restore illegal vec
  190.     move.b d6,cpu-base(a6)
  191.     subq.b #2,d6        ;68020?
  192.     beq.b getcaar
  193.     subq.b #1,d6        ;68030?
  194.     bne.b nocaar
  195. getcaar:dc.l movec_caar.a5        ;68020/30 only
  196.     move.l a5,regs+64+20-base(a6)    ;caar
  197. nocaar:    
  198.     move.w regs+64+28-base(a6),d0    ;start sr
  199.     lea regs+60-base(a6),a1        ;ptr start a7
  200.     move.l (a1)+,a0            ;start a7
  201.     btst #13,d0
  202.     beq.b fixa7            ;start usermode
  203.     addq.w #4,a1            ;skip usp,set isp
  204.     btst #12,d0
  205.     beq.b fixa7
  206.     addq.w #4,a1            ;skip isp,set msp
  207. fixa7:    move.l a0,(a1)
  208.  
  209.     moveq #0,d6        ;no fpu
  210.     lea $2c.w,a0        ;line-f vector
  211.     add.l vbreg-base(a6),a0
  212.     move.l (a0),a1
  213.     lea fpuline(pc),a2
  214.     move.l a2,(a0)
  215.     dc.w fsave_sp        ;68881/2
  216.     cmp.b #4,cpu-base(a6)    ;68040?
  217.     bne.b no40fpu
  218.     moveq #3,d6        ;68040fpu
  219.     bra.b fpurest
  220. no40fpu:moveq #1,d6        ;68881
  221.     cmp.b #$18,1(a7)    ;68881
  222.     beq.b fpurest
  223.     moveq #2,d6        ;68882
  224. fpurest:dc.w frestore_sp
  225. fpuline:move.l a3,a7
  226.     move.b d6,fpu-base(a6)
  227.  
  228.     moveq #0,d6        ;no mmu
  229.     tst.b econflg-base(a6)
  230.     bne.b mmuline        ;economy cpu
  231.     lea mmuline(pc),a2
  232.     move.l a2,(a0)
  233.     cmp.b #4,cpu-base(a6)    ;68040?
  234.     bne.b nommu40
  235.     moveq #3,d6        ;68040 mmu
  236.     bra.b mmuline
  237. nommu40:lea mmutt0-base(a6),a2    ;dummybuf
  238.     dc.l pmove_tc.a2    ;dummycmd
  239.     moveq #1,d6        ;68851
  240.     dc.l pmove_tt0.a2    ;dummycmd
  241.     moveq #2,d6        ;68030 mmu
  242. mmuline:move.l a3,a7
  243.     move.l a1,(a0)        ;restore line-f
  244.     move.b d6,mmu-base(a6)
  245.  
  246.     bsr.w savemmu
  247.     bsr.w savefpu
  248.  
  249.     move.l regs+64-base(a6),startusp-base(a6)
  250.     move.l regs+64+4-base(a6),startisp-base(a6)
  251.     move.l regs+64+8-base(a6),startmsp-base(a6)
  252.     move.l regs+64+12-base(a6),startvbr-base(a6)
  253.     move.l regs+64+16-base(a6),startcacr-base(a6)
  254.     move.l regs+64+20-base(a6),startcaar-base(a6)
  255.     move.w regs+64+28-base(a6),startsr-base(a6)
  256.     move.w sfcdfc-base(a6),startsfcdfc-base(a6)
  257.     
  258. ;init
  259.  
  260.     lea $dff002,a1
  261. wtblt:    btst #6,(a1)
  262.     bne.b wtblt            ;blitter still busy
  263.  
  264.     lea rdff002-base(a6),a0
  265.     moveq #7,d0        ;set the setbit
  266.     move.w (a1),(a0)+    ;rdff002
  267.     bset d0,-2(a0)
  268.     move.w $0e(a1),(a0)+    ;rdff010
  269.     bset d0,-2(a0)
  270.     move.w $1a(a1),(a0)+    ;rdff01c
  271.     bset d0,-2(a0)
  272.     move.w $1c(a1),(a0)+    ;rdff01e
  273.     bset d0,-2(a0)
  274.  
  275.     move.l #$7fff7fff,$98(a1)    ;$dff09a
  276.     move.w #$7fff,$94(a1)        ;$dff096 all dma off
  277.     moveq #0,d0
  278.     move.w d0,$34(a1)        ;$dff036 clr.w forbidden!
  279.     move.w d0,$17e(a1)        ;$dff180
  280.  
  281.     move.w $7c(a1),d0
  282.     cmp.b #$f8,d0        ;aga?
  283.     bne.b noaga
  284.     move.w #0,$1fc(a1)    ;reset sprites
  285. noaga:
  286.     moveq #0,d1
  287.     move.b modeflg-base(a6),d1
  288.     move.b rowstab(pc,d1.w),d0
  289.     move.b d0,d1
  290.     mulu #xchars*8,d1
  291.     move.l d1,scrsize-base(a6)
  292.     add.l #miscsize,d1
  293.     move.l d1,wrksize-base(a6)
  294.     move.b d0,rows-base(a6)
  295.     subq.b #1,d0
  296.     move.b d0,rowsm1-base(a6)
  297.     subq.b #1,d0
  298.     move.b d0,rowsm2-base(a6)
  299.     bra.b rowsok
  300. rowstab:dc.b 32,64,25,50,60,32
  301. rowsok:
  302.  
  303.     moveq #$08,d3        ;move.l #$80000,d3; 512K chip?
  304.     swap d3
  305.     move.l d3,himem-base(a6)
  306.     move.l #work512,defwork-base(a6)
  307.     btst #5,2(a1)        ;$dff004
  308.     beq.b nobig
  309.     bsr.w memtest        ;test if 1mb, bufadr useless
  310.     beq.b nobig
  311.     moveq #$10,d3        ;move.l #$100000,d3; 1M chip
  312.     swap d3
  313.     move.l d3,himem-base(a6)
  314.     move.l #work1mb,defwork-base(a6)
  315.     bsr.w memtest
  316.     beq.b nobig
  317.     moveq #$18,d3        ;move.l #$180000,d3; 1.5M chip
  318.     swap d3
  319.     move.l d3,himem-base(a6)
  320.     move.l #work1.5mb,defwork-base(a6)
  321.     bsr.w memtest
  322.     beq.b nobig
  323.     move.l #$200000,himem-base(a6)    ;2M chip
  324.     move.l #work2mb,defwork-base(a6)
  325. nobig:
  326.  
  327.     move.l defwork-base(a6),a0    ;in chipmem
  328.     lea progend-base,a1
  329.     cmp.l a0,a1        ;code/absworkspace overlap?
  330.     bls.b memsave
  331.     add.l wrksize-base(a6),a0
  332.     lea run(pc),a1
  333.     cmp.l a0,a1
  334.     bcc.b memsave    
  335.     sub.l wrksize-base(a6),a1
  336.     move.l a1,defwork-base(a6)
  337. memsave:
  338.     st abswork-base(a6)    ;absolute workspace, not memlist
  339.     bsr.w chkexec
  340.     bne.b absmem
  341.  
  342.     move.l $142(a0),a1    ;memheader
  343.     moveq #1,d1        ;chipmem
  344.     bsr.w grabmem
  345.     beq.b nogchip
  346.     move.l himem-base(a6),d0
  347.     sub.l wrksize-base(a6),d0
  348.     cmp.l d0,a1        ;memlist out of highmem
  349.     bhi.b nogchip    
  350.     move.l a1,defwork-base(a6)    ;use entry as workspace
  351.     sf abswork-base(a6)
  352. nogchip:clr.l bufadr-base(a6)
  353.     move.l $142(a0),a1    ;memheader
  354.     moveq #2,d1        ;fastmem
  355.     bsr.w grabmem
  356.     beq.b nogfast
  357.     move.l a1,bufadr-base(a6)    ;use entry as buffer
  358. nogfast:    
  359. absmem:
  360.  
  361.     st absbuf-base(a6)    ;absolute buffer
  362.     move.l bufadr-base(a6),d4
  363.     move.l #$f00002+progend-run,d3 ;no mousetst if in mod
  364.     bsr.b memtest        ;modifies bufadr
  365.     bne.w mem1
  366.     move.l d4,bufadr-base(a6)
  367.  
  368. mem7:    lea $bfe001,a0        ;if left mouse during startup
  369.     btst #6,(a0)        ;no backup is done
  370.     bne.b mem4 
  371.     clr.l bufadr-base(a6)    ;clr bufadr if no buf wanted
  372.     lea $dff006,a1
  373.     lea $017a(a1),a2    ;$dff180
  374. mem5:    move.b (a1),(a2)
  375.     btst #6,(a0)    
  376.     beq.b mem5
  377.     bra.w mem1
  378. mem4:    tst.l bufadr-base(a6)    ;memlist:fastmem?
  379.     seq absbuf-base(a6)    ;memlist buffer
  380.     bne.w mem1
  381.     move.l #$274000,d3    ;512k banks
  382.     bsr.b memtest
  383.     bne.b mem1
  384.     move.l #$c74000,d3
  385.     bsr.b memtest
  386.     bne.b mem1
  387.     cmp.w #$8,himem-base(a6);512K chip:work f4000,no backup at all
  388.     bne.b mem1
  389.     move.l #$f4000,d3    ;buffer on '1MB' A1000s without mod
  390.     pea mem1(pc)
  391. memtest:move.l d3,a2        ;datacache must be inactive!
  392.     and.l #$f80000,d3
  393.     clr.l bufadr-base(a6)
  394.     sub.l a1,a1
  395.     move.l d3,a0
  396.     move.l (a0),d6
  397.     move.l (a1),d7
  398.     move.l #"beer",d3    ;the ramtest values...
  399.     move.l #"gore",d1
  400.     move.l d3,(a1)
  401.     move.l d1,(a0)
  402.     bsr.w pushcache
  403.     bsr.w invcache
  404.     cmp.l (a0),d1
  405.     bne.b memfail
  406.     cmp.l (a1),d3
  407.     bne.b memfail
  408.     move.l a2,bufadr-base(a6)
  409. memfail:move.l d6,(a0)
  410.     move.l d7,(a1) 
  411.     bsr.w pushcache
  412.     bsr.w invcache
  413.     tst.l bufadr-base(a6)
  414.     rts
  415.  
  416. mem1:    move.l bufadr-base(a6),para+8-base(a6)
  417.     beq.b mem2
  418.     move.l defwork-base(a6),a0
  419.     move.l a0,para-base(a6)
  420.     add.l wrksize-base(a6),a0
  421.     move.l a0,para+4-base(a6)
  422.     moveq #3,d3
  423.     bsr.w t            ;transfer workspace to backupmem
  424.  
  425. mem2:    move.l vbreg-base(a6),a0
  426.     lea intvecs-base(a6),a1
  427.     moveq #$100/4-1,d0
  428. saveexc:move.l (a0)+,(a1)+
  429.     dbf d0,saveexc
  430.  
  431.     lea $bfd100,a0
  432.     st $200(a0)        ;ddr
  433.     st (a0)            ;all drives off
  434.     nop
  435.     move.b #%10000111,(a0)
  436.     nop
  437.     st (a0)
  438.     moveq #-1,d0
  439.     move.l d0,drivcyl-base(a6)
  440.  
  441.     lea mtchbuf-base(a6),a0
  442.     move.w #mtchnum-1,d0
  443. clrmbuf:clr.l (a0)+        ;init matchbuffer
  444.     dbf d0,clrmbuf
  445.  
  446.     lea helptxt-$7ffe(pc),a1
  447.     lea $7ffe(a1),a1
  448.     move.l a1,helpadr-base(a6)
  449.     sf insmode-base(a6)
  450.     sf hilight-base(a6)
  451.     sf row-base(a6)
  452.     move.l defwork-base(a6),d0
  453.     bra.w calchip        ;jmp warm
  454.  
  455. warm:    lea stackend-4-$7ff8-base(a6),a2
  456.     lea $7ff8(a2),a7
  457.     move.l regs+64+24-base(a6),para-base(a6)    ;set pc for disasm
  458.     clr.l breakpc-base(a6)
  459.     clr.l lastcmd-base(a6)
  460.  
  461.     lea $dff000,a2
  462.     move.l #$7fff7fff,$9a(a2)
  463.     move.w #$0c00,$34(a2)    ;r. mouse
  464.  
  465.     lea $bfd000,a0        ;set cia regs
  466.     move.b #3,$1201(a0)    ;$bfe201 l. mouse,ovl
  467.     st $1301(a0)        ;$bfe301 printer port
  468.     st $0300(a0)        ;$bfd300 drive port
  469.     sf $1c01(a0)            ;$bfec01
  470.     move.b #$80,$1e01(a0)        ;$bfee01
  471.     move.b #$88,$1d01(a0)        ;$bfed01
  472.     tst.b $1d01(a0)            ;$bfed01
  473.     sf $0e00(a0)        ;$bfde00 ciab cra
  474.     move.b #$7f,$0d00(a0)    ;$bfdd00 ciab icr
  475.     tst.b $0d00(a0)        ;$bfdd00
  476.  
  477.     lea except(pc),a0
  478.     lea $8.w,a1
  479.     add.l vbreg-base(a6),a1
  480.     moveq #[$100-8]/4-1,d0
  481. setex:    move.l a0,(a1)+
  482.     add.w #2,a0        ;bsr.b xx
  483.     dbf d0,setex
  484.  
  485.     sf ascii-base(a6)
  486.     sf dontbuf-base(a6)
  487.     lea $68.w,a1
  488.     add.l vbreg-base(a6),a1
  489.     lea keyint(pc),a3    ;$68
  490.     lea vblint(pc),a4    ;$6c
  491.     lea audint(pc),a5    ;$70
  492.     movem.l a3-a5,(a1)
  493.     lea thehit(pc),a0
  494.     move.l a0,$14(a1)    ;$7c level 7 intvec
  495.  
  496.     lea mousespr-base(a6),a0
  497.     move.l spradr-base(a6),a1
  498.     moveq #34+4-1,d0    ;34/2=sprhigh
  499. cpspr:    move.w (a0)+,(a1)+
  500.     dbf d0,cpspr
  501.  
  502.     bsr initcop
  503.     bsr gencop
  504.  
  505.     bsr.w pushcache
  506.  
  507.     move.w #$c028,$9a(a2)
  508. waitvbl:btst #5,$1f(a2)
  509.     beq.b waitvbl
  510.  
  511.     tst.b frzflag-base(a6)    ;set coplist if jmpmode
  512.     bne.b mutil4        ;or interruptlist if breakmode
  513.     btst #0,modeflg-base(a6)
  514.     beq.b nolac
  515. nolong:    tst.w 4(a2)
  516.     bpl.b nolong
  517. nolac:    move.w #$0080,$96(a2)    ;cop off
  518.     move.l copadr-base(a6),$80(a2)
  519.     tst.w $88(a2)        ;strobe
  520.     move.w #$8080,$96(a2)    ;cop on
  521. mutil4:    move.w #$8340,$96(a2)    ;bpl/blt on
  522.  
  523.     move #$2000,sr        ;allow ints
  524.  
  525.     sf hilight-base(a6)
  526.     sf col-base(a6)
  527.     moveq #0,d3
  528.     bsr.w r            ;output registers
  529.  
  530.     bsr.b chkmon
  531.     lea constend-$7ffe(pc),a0
  532.     lea $7ffe(a0),a0
  533.     cmp.l (a0),d0
  534.     beq.b chkok
  535.     lea warntxt(pc),a1
  536.     bsr msgout
  537. chkok:
  538.     bsr.w rprompt        ;>
  539.     bsr curson
  540.     clr.w buflen-base(a6)
  541. loop:    tst.w buflen-base(a6)
  542.     beq.b loop
  543.     bsr cursoff
  544.     clr.w d1
  545.     lea keybuf-base(a6),a0
  546. dobuf:    move.b (a0,d1.w),d0
  547.     bsr prtasc
  548.     addq.w #1,d1
  549.     cmp.w buflen-base(a6),d1
  550.     bcs.b dobuf
  551.  
  552.     clr.w buflen-base(a6)
  553.     bsr curson
  554.     bra.b loop
  555.  
  556. chkmon:    moveq #0,d0
  557.     lea run(pc),a0
  558.     move.w #(constend-run)/4-1,d1
  559. chkcorr:add.l (a0)+,d0
  560.     dbf d1,chkcorr
  561.     rts
  562. warntxt:dc.b "Warning:BeerMon is corrupted"!$80
  563.     even
  564.  
  565.  
  566. initcop:lea $dff000,a5
  567.  
  568.     move.w rgb0-base(a6),$180(a5)
  569.     move.w rgb1-base(a6),$182(a5)
  570.     move.w #$0f00,$1a2(a5)
  571.     move.w #$0000,$1a4(a5)
  572.     move.w #$00f0,$1a6(a5)
  573.  
  574.     lea copdata(pc),a0
  575.     moveq #0,d0
  576.     move.b modeflg-base(a6),d0
  577.     mulu #copdlen,d0
  578.     add.l d0,a0
  579.     move.l (a0)+,$8e(a5)
  580.     move.l (a0)+,$92(a5)
  581.     move.w (a0)+,$1dc(a5)
  582.     move.w (a0)+,$100(a5)
  583.     move.w (a0)+,$108(a5)
  584.  
  585.     move.w #$0000,$102(a5)
  586.     move.w #$0000,$1fc(a5)
  587.  
  588.     cmp.b #4,modeflg-base(a6)
  589.     bne.w nomscan
  590.     move.w #$0071,$1c0(a5)
  591.     move.w #$0008,$1c4(a5)
  592.     move.w #$000e,$1de(a5)
  593.     move.w #$001c,$1c2(a5)
  594.     move.w #$001e,$1c6(a5)
  595.     move.w #$0046,$1e2(a5)
  596.     move.w #$020c,$1c8(a5)
  597.     move.w #$0000,$1cc(a5)
  598.     move.w #$0003,$1e0(a5)
  599.     move.w #$0200,$1e4(a5)
  600.     move.w #$0005,$1ca(a5)
  601.     move.w #$001d,$1ce(a5)
  602.     move.w #$0012,$104(a5)
  603.     move.w #$0c21,$106(a5)
  604.  
  605.     movem.w rgb0-base(a6),d0-d1
  606.     bsr.w mapcol
  607.     move.l d3,$180(a5)
  608.     move.l d2,$188(a5)
  609.  
  610.     lea $1a0(a5),a0
  611.     moveq #0,d0
  612. cpycols:move.l hmscols(pc,d0.w),(a0)+
  613.     addq.w #4,d0
  614.     cmp.w #8*4,d0
  615.     bne.b cpycols
  616.  
  617. nomscan:
  618.     rts
  619. hmscols:dc.l $00000c00,$000000c0,$03000f00,$030003c0    ;mapped colours
  620.     dc.l $00000c00,$000000c0,$0030c030,$00300030    ;multiscan mode
  621.  
  622.     ;    $008e0090  ,$00920094  ,$01dc,$0100,$108  
  623. copdata:dc.w $2c81,$2cc1,$003c,$00d4,$0020,$9200,$00000    ;pal
  624. copdlen=*-copdata
  625.     dc.w $2c81,$2cc1,$003c,$00d4,$0020,$9204,xchars    ;pal lace
  626.     dc.w $2c81,$f4c1,$003c,$00d4,$0000,$9200,$00000    ;ntsc
  627.     dc.w $2c81,$f4c1,$003c,$00d4,$0000,$9204,xchars    ;ntsc lace
  628.     dc.w $2c45,$0ce5,$0020,$0068,$1b88,$1241,$00000    ;multiscan
  629.  
  630. mapcol:    movem.l d4/d6-d7,-(a7)
  631.     move.w d0,d6
  632.     move.w d1,d7
  633.     moveq #4-1,d4
  634.     moveq #0,d2
  635.     moveq #0,d3
  636. codecol:move.w d7,d0
  637.     bsr.b codenib
  638.     move.w d0,d1
  639.     mulu #5,d0
  640.     and.w #$fff0,d7
  641.     or.b d0,d7
  642.     move.b d0,d3
  643.     move.w d6,d0
  644.     bsr.b codenib
  645.     sub.w d0,d1
  646.     mulu #5,d0
  647.     and.w #$fff0,d6
  648.     or.b d0,d6
  649.     move.b d0,d2
  650.     add.w d1,d2
  651.     ror.l #4,d2
  652.     sub.w d1,d3
  653.     ror.l #4,d3
  654.     ror.w #4,d6
  655.     ror.w #4,d7
  656.     dbf d4,codecol
  657.     move.w d7,d2
  658.     move.w d6,d3
  659.     swap d3
  660.     movem.l (a7)+,d4/d6-d7
  661.     rts
  662. codenib:andi.l #$0f,d0
  663.     addq.w #2,d0
  664.     divu #5,d0
  665.     rts
  666.  
  667. gencop:    move.l copadr-base(a6),a0
  668.     moveq #-2,d0
  669.     move.l scradr-base(a6),d1
  670.     move.l a0,a1
  671.     swap d1
  672.     move.w #$00e0,(a0)+
  673.     move.w d1,(a0)+
  674.     swap d1
  675.     move.w #$00e2,(a0)+
  676.     move.w d1,(a0)+
  677.     btst #0,modeflg-base(a6)
  678.     beq.b genendc
  679.  
  680.     moveq #12,d2
  681.     add.l a0,d2
  682.     move.w #$0080,(a0)+
  683.     swap d2
  684.     move.w d2,(a0)+
  685.     move.w #$0082,(a0)+
  686.     swap d2
  687.     move.w d2,(a0)+
  688.     move.l d0,(a0)+
  689.  
  690.     add.l #xchars,d1
  691.     swap d1
  692.     move.w #$00e0,(a0)+
  693.     move.w d1,(a0)+
  694.     swap d1
  695.     move.w #$00e2,(a0)+
  696.     move.w d1,(a0)+
  697.  
  698.     move.l a1,d2
  699.     move.w #$0080,(a0)+
  700.     swap d2
  701.     move.w d2,(a0)+
  702.     move.w #$0082,(a0)+
  703.     swap d2
  704.     move.w d2,(a0)+
  705. genendc:move.l d0,(a0)+
  706.     rts
  707.  
  708. exit:    moveq #4-1,d2
  709.     move.l drivcyl-base(a6),d3
  710. resetcy:tst.b d3
  711.     bmi.b noresc
  712.     moveq #3,d0
  713.     add.b d2,d0
  714.     move.b d0,drvbit-base(a6)
  715.     bsr motondt
  716.     bsr trk0
  717. resetst:subq.b #1,d3
  718.     bmi.b noresc2
  719.     bsr stepup
  720.     bra.b resetst
  721. noresc2:bsr motoff
  722. noresc:    ror.l #8,d3
  723.     dbf d2,resetcy
  724.  
  725.     move.w #$7fff,$dff096
  726.     move.w #$4000,$dff09a
  727.  
  728.     move.w timeout-base(a6),$de0000
  729.  
  730.     move.l bufadr-base(a6),d0
  731.     beq.b mem3
  732.     move.l d0,para-base(a6)
  733.     add.l wrksize-base(a6),d0
  734.     move.l d0,para+4-base(a6)
  735.     move.l scradr-base(a6),para+8-base(a6)
  736.     moveq #3,d3
  737.     bsr.w t            ;retransfer workspace, if any
  738. mem3:
  739.     lea intvecs-base(a6),a0
  740.     move.l startvbr-base(a6),a1
  741.     moveq #$100/4-1,d0
  742. resetex:move.l (a0)+,(a1)+
  743.     dbf d0,resetex
  744.  
  745.     bsr.w loadmmu
  746.     bsr.w loadfpu
  747.  
  748.     tst.b frzflag-base(a6)    ;freezemode?
  749.     bne.w endfrz
  750.  
  751.     lea run(pc),a0    ;in module? then reset
  752.     cmp.l #$f00002,a0
  753.     beq.w doreset
  754.  
  755.     move #$3700,sr        ;use isp|(68020+:msp)
  756.     move.l startmsp-base(a6),a7    ;msp
  757.     move #$2700,sr            ;use isp
  758.     move.l startisp-base(a6),a7    ;isp
  759.  
  760.     tst.b cpu-base(a6)    ;68010+ ?
  761.     beq.b nomsp3
  762.     move.l startvbr-base(a6),a5    ;vbr
  763.     dc.l movec_a5.vbr
  764.     move.b startsfcdfc-base(a6),d0
  765.     dc.l movec_d0.sfc
  766.     move.b startsfcdfc+1-base(a6),d0
  767.     dc.l movec_d0.dfc
  768.     cmp.b #2,cpu-base(a6)    ;68020+ ?
  769.     bcs.b nomsp3
  770.     move.l startcacr-base(a6),a5    ;cacr
  771.     dc.l movec_a5.cacr
  772.     cmp.b #4,cpu-base(a6)    ;68040?
  773.     beq.b nomsp3
  774.     move.l startcaar-base(a6),a5    ;caar
  775.     dc.l movec_a5.caar
  776. nomsp3:
  777.     move.l startusp-base(a6),a0    ;restore initial? regs
  778.     move.l a0,usp
  779.  
  780. ;    move.b modeflg-base(a6),d0
  781. ;    beq.b noforce
  782. ;    subq.b #3,d0
  783. ;    beq.b noforce
  784. ;    bsr.b beamcon        ;restore beamcon0 reg
  785. ;noforce:
  786.  
  787.     lea $dff000,a4
  788.     move.w #$0080,$96(a4)
  789.  
  790.     bsr display
  791.     move.w #$8080,$96(a4)
  792.     move.w #$83f0,$96(a4)
  793.     move.w #$e02c,$9a(a4)
  794.     bclr #1,$bfe001
  795.  
  796.     move.l regs-base(a6),d0
  797.     subq.l #1,d0
  798.     beq.b fakebst        ;oh...
  799.     addq.l #1,d0
  800. fakebst:move.w startsr-base(a6),sr
  801.     movem.l regs+4-base(a6),d1-d7/a0-a6
  802.     rts
  803.  
  804. LoadView=-222
  805. WaitTOF=-270
  806. display:move.l a6,-(a7)
  807.     move.l 4.w,a6
  808.     lea gfxname(pc),a1
  809.     jsr OldOpenLibrary(a6)
  810.     move.l d0,a6
  811.     tst.l d0
  812.     beq.b nogfx
  813.     move.l 34(a6),d2    ;ActiView
  814.     sub.l a1,a1
  815.     jsr LoadView(a6)
  816.     jsr WaitTOF(a6)
  817.     jsr WaitTOF(a6)
  818.     move.l d2,a1
  819.     jsr LoadView(a6)
  820.     move.l 38(a6),$dff080
  821.     move.w d0,$dff088
  822.     
  823.     move.l a6,a1
  824.     move.l 4.w,a6
  825.     jsr CloseLibrary(a6)
  826. nogfx:    move.l (a7)+,a6
  827.     rts
  828. gfxname:dc.b "graphics.library",0
  829.     even
  830.     
  831. chkexec:move.l 4.w,a0
  832.     move.l a0,d1
  833.     btst #0,d1        ;even?
  834.     bne.b failexc
  835.     add.l $26(a0),d1    ;checkbase
  836.     not.l d1
  837.     bne.b failexc
  838.     lea $22(a0),a1
  839.     moveq #($54-$22)/2-1,d0
  840. execsum:add.w (a1)+,d1
  841.     dbf d0,execsum    
  842.     not.w d1
  843.     ;bne.b failexc
  844. failexc:rts            ;bne.b badexec
  845.  
  846. grabmem:move.l a1,d0        ;a1:execbase,d2:attributebit
  847. nxtmlst:btst #0,d0
  848.     bne.b nograb
  849.     move.w $0e(a1),d0    ;attributes
  850.     btst d1,d0
  851.     bne.b memchip
  852.     move.l (a1),a1
  853.     move.l a1,d0
  854.     bne.b nxtmlst
  855.     bra.w nograb
  856. memchip:move.l $10(a1),a1
  857.     move.l a1,d0
  858.     beq.b nograb
  859. scanml:    btst #0,d0
  860.     bne.b nograb
  861.     btst #0,7(a1)    ;even size?
  862.     bne.b nograb
  863.     moveq #8,d0
  864.     add.l wrksize-base(a6),d0
  865.     cmp.l 4(a1),d0
  866.     bls.b useml
  867.     move.l (a1),a1
  868.     move.l a1,d0
  869.     bne.b scanml
  870.     bra.b nograb
  871. useml:    ;addq.l #8,a1            ;don't trash ptr/size
  872.     add.l 4(a1),a1    ;end of chunk
  873.     sub.l wrksize-base(a6),a1
  874.     moveq #-1,d0
  875.     rts
  876. nograb:    moveq #0,d0
  877.     rts
  878.  
  879. endfrz:    move #$3700,sr        ;use isp|(68020+:msp)
  880.     move.l startmsp-base(a6),a7    ;msp
  881.     move #$2700,sr        ;use isp
  882.     move.l startisp-base(a6),a7    ;isp
  883.  
  884.     tst.b cpu-base(a6)    ;68010+ ?
  885.     beq.b nomsp4
  886.     move.l startvbr-base(a6),a5    ;vbr
  887.     dc.l movec_a5.vbr
  888.     move.b startsfcdfc-base(a6),d0
  889.     dc.l movec_d0.sfc
  890.     move.b startsfcdfc+1-base(a6),d0
  891.     dc.l movec_d0.dfc
  892.     cmp.b #2,cpu-base(a6)    ;68020+ ?
  893.     bcs.b nomsp4
  894.     move.l startcacr-base(a6),a5    ;cacr
  895.     dc.l movec_a5.cacr
  896.     cmp.b #4,cpu-base(a6)        ;68040?
  897.     beq.b nomsp4
  898.     move.l startcaar-base(a6),a5    ;caar
  899.     dc.l movec_a5.caar
  900. nomsp4:
  901.     move.l startusp-base(a6),a0    ;restore initial? regs
  902.     move.l a0,usp
  903.     lea $dff000,a2
  904.     move.w #$7fff,d0
  905.     move.w d0,$96(a2)
  906.     move.w d0,$9e(a2)
  907.     move.w d0,$9a(a2)
  908.     move.w d0,$9c(a2)
  909. xxx:    move.w $6(a2),$180(a2)    ;nice, eh?
  910.     dbf d0,xxx
  911.     move.w rdff002-base(a6),$96(a2)
  912.     move.w rdff010-base(a6),$9e(a2)
  913.     move.w rdff01c-base(a6),$9a(a2)
  914.     move.w rdff01e-base(a6),$9c(a2)
  915.     movem.l regs-base(a6),d0-d7/a0-a6
  916.     rte
  917.  
  918. savereg:move.w (a7),d0        ;the trick to grab the system
  919.     move.w #$2700,(a7)        ;stay in sv,no ints
  920.     move.w d0,regs+64+28-base(a6)        ;sr
  921.     move.l 2(a7),regs+64+24-base(a6)    ;pc
  922.     addq.l #2,2(a7)        ;skip illegal
  923.     rte
  924.  
  925. savefpu:tst.b fpu-base(a6)
  926.     beq.b nofpu0
  927.     lea fpuregs-base(a6),a2
  928.     dc.l fmovem_fp0_7.a2
  929.     lea fpcr-base(a6),a2
  930.     dc.l fmovem_fpcx.a2
  931. nofpu0:    rts
  932. loadfpu:tst.b fpu-base(a6)
  933.     beq.b nofpu1
  934.     lea fpuregs-base(a6),a2
  935.     dc.l fmovem_a2.fp0_7
  936.     lea fpcr-base(a6),a2
  937.     dc.l fmovem_a2.fpcx
  938. nofpu1:    rts
  939. savemmu:tst.b mmu-base(a6)    ;nommu
  940.     beq.b savemm0
  941.     cmp.b #3,mmu-base(a6)    ;68040mmu
  942.     beq.b savemm0
  943.     cmp.b #1,mmu-base(a6)
  944.     beq.b mmu51
  945.     lea mmutt0-base(a6),a2
  946.     dc.l pmove_tt0.a2
  947.     addq.w #mmutt1-mmutt0,a2
  948.     dc.l pmove_tt1.a2
  949.     bra.b no851
  950. mmu51:    lea mmudrp-base(a6),a2        ;68851
  951.     dc.l pmove_drp.a2
  952. no851:    lea mmutt0+8-base(a6),a2
  953.     dc.l pmove_tc.a2
  954.     addq.w #mmusrp-mmutc,a2
  955.     dc.l pmove_srp.a2
  956.     addq.w #mmucrp-mmusrp,a2
  957.     dc.l pmove_crp.a2
  958.     addq.w #mmusr-mmucrp,a2
  959.     dc.l pmove_mmusr.a2
  960. savemm0:rts
  961. loadmmu:tst.b mmu-base(a6)    ;nommu
  962.     beq.b loadmm0
  963.     cmp.b #3,mmu-base(a6)    ;68040mmu
  964.     beq.b loadmm0
  965.     lea $e0.w,a1        ;mmu config error trap
  966.     add.l vbreg-base(a6),a1
  967.     move.l (a1),-(a7)    ;old trapvec
  968.     lea mmutrap(pc),a2
  969.     move.l a2,(a1)
  970.     cmp.b #1,mmu-base(a6)
  971.     beq.b mmu512
  972.     lea mmutt0-base(a6),a2
  973.     dc.l pmove_a2.tt0    ;pmovefd?
  974.     addq.w #mmutt1-mmutt0,a2
  975.     dc.l pmove_a2.tt1
  976.     bra.b no8512
  977. mmu512:    lea mmudrp-base(a6),a2        ;68851
  978.     dc.l pmove_a2.drp
  979. no8512:    lea mmutt0+8-base(a6),a2
  980.     dc.l pmove_a2.tc
  981.     addq.w #mmusrp-mmutc,a2
  982.     dc.l pmove_a2.srp
  983.     addq.w #mmucrp-mmusrp,a2
  984.     dc.l pmove_a2.crp
  985.     addq.w #mmusr-mmucrp,a2
  986.     dc.l pmove_a2.mmusr
  987.     move.l (a7)+,(a1)
  988. loadmm0:rts
  989. mmutrap:rte    ;ignore
  990.  
  991. getvbr:    sub.l a5,a5
  992.     bsr.w chkexec
  993.     bne.b badexec
  994.     move.l a6,d0
  995.     move.l 4.w,a6
  996.     btst #0,$129(a6)
  997.     beq.b novbr
  998.     lea getit(pc),a5
  999.     jsr Supervisor(a6)
  1000. novbr:    move.l d0,a6
  1001. badexec:rts
  1002. getit:    dc.l movec_vbr.a5
  1003.     rte    
  1004.  
  1005.     ; well, it looks funny, but there are SOME entries here
  1006. except:    bsr.b incexc    ;08
  1007.     bsr.b incexc
  1008.     bsr.b incexc
  1009.     bsr.b incexc
  1010.     bsr.b incexc
  1011.     bsr.b incexc
  1012.     bsr.b incexc
  1013.     bsr.b incexc
  1014.     bsr.b incexc
  1015.     bsr.b incexc
  1016.     bsr.b incexc
  1017.     bsr.b incexc
  1018.     bsr.b incexc
  1019.     bsr.b incexc    ;3c
  1020.  
  1021.     bsr.b incexc    ;40
  1022.     bsr.b incexc
  1023.     bsr.b incexc
  1024.     bsr.b incexc
  1025.     bsr.b incexc
  1026.     bsr.b incexc
  1027.     bsr.b incexc
  1028.     bsr.b incexc
  1029.     bsr.b incexc
  1030.     bsr.b incexc
  1031.     bsr.b incexc
  1032.     bsr.b incexc
  1033.     bsr.b incexc
  1034.     bsr.b incexc
  1035.     bsr.b incexc
  1036.     bsr.b incexc    ;7c
  1037.  
  1038.     bsr.b incexc    ;80
  1039.     bsr.b incexc
  1040.     bsr.b incexc
  1041.     bsr.b incexc
  1042.     bsr.b incexc
  1043.     bsr.b incexc
  1044.     bsr.b incexc
  1045.     bsr.b incexc
  1046.     bsr.b incexc
  1047.     bsr.b incexc
  1048.     bsr.b incexc
  1049.     bsr.b incexc
  1050.     bsr.b incexc
  1051.     bsr.b incexc
  1052.     bsr.b incexc
  1053.     bsr.b incexc    ;bc
  1054.  
  1055.     bsr.b incexc    ;c0
  1056.     bsr.b incexc
  1057.     bsr.b incexc
  1058.     bsr.b incexc
  1059.     bsr.b incexc
  1060.     bsr.b incexc
  1061.     bsr.b incexc
  1062.     bsr.b incexc
  1063.     bsr.b incexc
  1064.     bsr.b incexc
  1065.     bsr.b incexc
  1066.     bsr.b incexc
  1067.     bsr.b incexc
  1068.     bsr.b incexc
  1069.     bsr.b incexc
  1070.     bsr.b incexc    ;fc
  1071.     nop    
  1072. incexc:    move.l a6,-(a7)
  1073.     lea base-$7ffe(pc),a6
  1074.     lea $7ffe(a6),a6
  1075.     move.l (a7)+,regs+8-base(a6)
  1076.     movem.l d0-d1,regs-base(a6)
  1077.     move.l (a7)+,d1        ;return address
  1078.     lea except(pc),a6
  1079.     sub.l a6,d1
  1080.     lea base-$7ffe(pc),a6
  1081.     lea $7ffe(a6),a6
  1082.     lsr.b #1,d1
  1083.     move.b d1,excnum-base(a6)    ;$08:1,$0c:2...$fc:3e
  1084.     
  1085.     move.w (a7),d1            ;sr
  1086.     tst.b cpu-base(a6)        
  1087.     bne.b tp680x0            ;68000 exception?
  1088.     cmp.b #2,excnum-base(a6)    ;adr/bus err
  1089.     bhi.b sh68000
  1090.     move.l 2(a7),excadr-base(a6)
  1091.     move.w 6(a7),excinstr-base(a6)
  1092.     move.w 8(a7),exceptsr-base(a6)
  1093.     move.l 10(a7),exceptpc-base(a6)
  1094.  
  1095.     move.w 8(a7),d1        ;sr
  1096.     lea $0e(a7),a7
  1097.     bra.w quitexc
  1098. sh68000:move.w (a7),exceptsr-base(a6)
  1099.     move.l 2(a7),exceptpc-base(a6)
  1100.     addq.w #06,a7 
  1101.     bra.w quitexc
  1102.  
  1103. ; MC68010 + exception processing
  1104. tp680x0:move.w 6(a7),d0        ;formatcode
  1105.     and.w #%1111000000000000,d0
  1106.     beq.b isshort
  1107.     cmp.w #%0001000000000000,d0    ;int format
  1108.     bne.b nshort
  1109. isshort:move.w (a7),exceptsr-base(a6)
  1110.     move.l 2(a7),exceptpc-base(a6)
  1111.     addq.w #08,a7
  1112. ;exception type        pc
  1113. ;interrupt,trap #n    next
  1114. ;format error        rte, frestore
  1115. ;illegal,linea,linef    illegal,linea,linef
  1116. ;privilege violation    1st word causing violation
  1117. ;fp pre-instruction    fp instruction that returned fp pre-instruction
  1118. nshort:    cmp.w #%0010000000000000,d0    ;instr exception
  1119.     bne.b ninex
  1120.     move.w (a7),exceptsr-base(a6)
  1121.     move.l 8(a7),exceptpc-base(a6)    ;address
  1122.     cmp.b #9,excnum-base(a6)    ;linea?
  1123.     beq.b unimpfp
  1124.     cmp.b #2,excnum-base(a6)    ;address error?
  1125.     bne.b ninex2
  1126. unimpfp:move.l 2(a7),exceptpc-base(a6)    ;instruction address
  1127.     move.l 8(a7),excadr-base(a6)    ;referenced address
  1128. ninex2:    lea $0c(a7),a7
  1129. ;exception type                pc    address
  1130. ;chk,chk2,trapcc,ftrapcc,trapv,        next    instr address
  1131. ;trace,zero divide                "    "
  1132. ;unimplemented fp instr            next    calculated fp ea
  1133. ;address error                instr    referenced address
  1134. ninex:    cmp.w #%0011000000000000,d0    ;fp post instr exception (40)
  1135.     bne.b nfppost
  1136.     move.w (a7),exceptsr-base(a6)
  1137.     move.l 2(a7),exceptpc-base(a6)
  1138.     move.l 8(a7),excadr-base(a6)
  1139.     lea $0c(a7),a7
  1140. ;exception type        pc    address
  1141. ;fp post-instruction    next    referenced address
  1142. nfppost:cmp.w #%0111000000000000,d0    ;access error (40)
  1143.     bne.b naccerr
  1144.     move.w (a7),exceptsr-base(a6)
  1145.     move.l 2(a7),exceptpc-base(a6)    ;next instr
  1146.     move.l 20(a7),excadr-base(a6)    ;fault address
  1147.     lea $3c(a7),a7
  1148. ;exception type            pc
  1149. ;access fault, bus error    next instr
  1150. naccerr:cmp.w #%1000000000000000,d0    ;68010 buserror
  1151.     bne.b n10berr
  1152.     move.l 10(a7),excadr-base(a6)
  1153.     move.w 24(a7),excinstr-base(a6)
  1154.     move.w (a7),exceptsr-base(a6)
  1155.     move.l 2(a7),exceptpc-base(a6)
  1156.     lea $3a(a7),a7
  1157. n10berr:cmp.w #%1001000000000000,d0    ;coprocessor midinstr
  1158.     bne.b ncpmid
  1159.     move.w (a7),exceptsr-base(a6)
  1160.     move.l 2(a7),excadr-base(a6)    ;next word
  1161.     move.l 8(a7),exceptpc-base(a6)    ;instr address
  1162.     lea $14(a7),a7
  1163. ;exception type        pc        address
  1164. ;coprocessor mid instr    next word    instruction address
  1165. ;protocol violation    next word    instruction address
  1166. ;int during copro instr    next word    instruction address
  1167. ncpmid:    cmp.w #%1010000000000000,d0    ;short buserror
  1168.     bne.b nshberr
  1169.     move.l 20(a7),excadr-base(a6)    ;internal reg
  1170.     move.w (a7),exceptsr-base(a6)
  1171.     move.l 2(a7),exceptpc-base(a6)
  1172.     lea $20(a7),a7
  1173. ;exception type        pc
  1174. ;address, bus error    next instr
  1175. nshberr:cmp.w #%1011000000000000,d0    ;long buserror
  1176.     bne.b nlgberr
  1177.     move.l 36(a7),excadr-base(a6)    ;stage b address
  1178.     move.w 30(a7),excinstr-base(a6)    ;internal reg
  1179.     move.w (a7),exceptsr-base(a6)
  1180.     move.l 2(a7),exceptpc-base(a6)    ;instruction address
  1181.     lea $5c(a7),a7
  1182. ;exception type        pc
  1183. ;address, bus error    executed instr when fault occured
  1184. nlgberr:
  1185. quitexc:and.w #$3fff,d1        ;clr tracebits
  1186.     move.w d1,sr
  1187.     
  1188.     lea g1(pc),a6
  1189.     cmp.l (a7),a6        ;sp changed?
  1190.     lea base-$7ffe(pc),a6
  1191.     lea $7ffe(a6),a6
  1192.     bne.b newsp
  1193.     addq.w #4,a7        ;remove return adr
  1194. newsp:    move.w d1,ccr
  1195.     movem.l regs-base(a6),d0-d1/a6
  1196.     bra.w g1
  1197.  
  1198. prtasc:    
  1199.     bsr.b doctrl
  1200.     tst.b d7
  1201.     beq.b prtasc0
  1202.     tst.b insmode-base(a6)
  1203.     beq.b noinsm
  1204.     bsr insert
  1205. noinsm:    bra.w rawchr
  1206. prtasc0:rts
  1207.  
  1208. doctrl:    sf d7            ;no a0,d1,d7 allowed down here
  1209.     cmp.b #$13,d0
  1210.     beq.w csright
  1211.     cmp.b #$12,d0
  1212.     beq.w csleft
  1213.     cmp.b #$11,d0
  1214.     beq.w csdownroll
  1215.     cmp.b #$10,d0
  1216.     beq.w csup
  1217.     cmp.b #1,d0    ;sh-csup
  1218.     beq.w cstop
  1219.     cmp.b #2,d0
  1220.     beq.w csbot
  1221.     cmp.b #3,d0
  1222.     beq.w csbeg
  1223.     cmp.b #4,d0
  1224.     beq.w csend
  1225.     cmp.b #$0d,d0
  1226.     beq.w enter
  1227.     cmp.b #$0e,d0
  1228.     beq.w shenter
  1229.     cmp.b #$07,d0    ;sh-bs
  1230.     beq.w clrhome
  1231.     cmp.b #$08,d0    ;bs
  1232.     beq.w backspc
  1233.     cmp.b #$09,d0    ;del
  1234.     beq.w del
  1235.     cmp.b #$0a,d0    ;sh-del
  1236.     beq.w insert
  1237.     cmp.b #6,d0
  1238.     beq.w help
  1239.     cmp.b #11,d0
  1240.     beq.w swapbuf
  1241.     cmp.b #$05,d0
  1242.     beq.b tab    ;tab    
  1243.     cmp.b #$14,d0
  1244.     beq.w lnclr    ;sh-tab    
  1245.     cmp.b #$15,d0
  1246.     beq.w histbk
  1247.     cmp.b #$16,d0
  1248.     beq.w histfw
  1249.     cmp.b #$19,d0
  1250.     beq.w kphome
  1251.     cmp.b #$1a,d0
  1252.     beq.w kpend
  1253.     cmp.b #12,d0    ;sh-ins
  1254.     beq.b instogl
  1255.  
  1256.     cmp.b #$80,d0
  1257.     bcs.b nofkey
  1258.     cmp.b #$89,d0
  1259.     bls.b dofkey
  1260. nofkey:    st d7
  1261.     rts
  1262.  
  1263. instogl:not.b insmode-base(a6)
  1264.     rts
  1265.  
  1266. dofkey:    move.w #1,buflen-base(a6)    ;funky keys..
  1267.     lea fkeybuf-base(a6),a5
  1268.     sub.b #$80,d0
  1269.     ext.w d0
  1270.     mulu #fkeylen,d0
  1271.     lea (a5,d0.w),a5
  1272.     moveq #fkeylen-1,d2
  1273. dofk0:    move.b (a5)+,d0
  1274.     beq.b dofk1
  1275.     cmp.b #"|",d0            ;more than one cmd?
  1276.     bne.b dofk2
  1277.     moveq #13,d0
  1278. dofk2:    bsr.w bufit
  1279.     dbf d2,dofk0
  1280. dofk1:    rts
  1281. ;    moveq #13,d0
  1282. ;    bra.w bufit
  1283.  
  1284. tab:    bsr.b tab0            ;skips spaces 'til next data
  1285.     bne.b tab
  1286. tab1:    cmp.b #xchars-1,col-base(a6)
  1287.     beq.b tab2
  1288.     bsr.b tab0
  1289.     beq.b tab1
  1290.     cmp.b #"'",(a5)
  1291.     beq.b tab1
  1292.     rts
  1293. tab2:    sf col-base(a6)
  1294. tab0:    bsr.w csright
  1295.     bsr.w crsrtxt
  1296.     cmp.b #" ",(a5)
  1297.     rts
  1298.  
  1299. lnclr:    move.w row-base(a6),d3    ;row&col
  1300.     moveq #xchars-1,d4
  1301.     sub.b d3,d4        ;col
  1302. lnloop:    bsr.w del
  1303.     dbf d4,lnloop
  1304. lnend:    move.w d3,row-base(a6)
  1305.     rts
  1306.  
  1307. histfw:    moveq #1,d2
  1308.     bra.b hist2
  1309. histbk:    moveq #-1,d2
  1310. hist2:    lea histlin-base(a6),a1
  1311.     move.b (a1),d3
  1312.     moveq #histnum-1,d0
  1313.     add.b d2,(a1)        ;up/down
  1314.     bmi.b hist1
  1315.     move.b (a1),d0
  1316.     divu #histnum,d0
  1317.     swap d0
  1318. hist1:    move.b d0,(a1)
  1319.     movem.l d1/a0,-(a7)
  1320.     lea histbuf-base(a6),a0
  1321.     ext.w d0
  1322.     mulu #xchars-1,d0
  1323.     add.l d0,a0
  1324.     tst.b (a0)
  1325.     bne.b hist3
  1326.     move.b d3,(a1)        ;histlin
  1327.     bra.b hist4
  1328. hist3:    lea linebuf-base(a6),a1
  1329.     move.b #">",(a1)+
  1330.     moveq #xchars-1-1,d1
  1331. hist0:    move.b (a0)+,(a1)+
  1332.     dbf d1,hist0    
  1333.     bsr.w rawout        ;del:d0,d1,a0
  1334. hist4:    movem.l (a7)+,d1/a0
  1335.     rts
  1336.  
  1337. kphome:    bsr.b cstop
  1338. csbeg:    move.b #1,col-base(a6)
  1339.     rts
  1340. cstop:    tst.b row-base(a6)
  1341.     beq.b pageup
  1342.     sf row-base(a6)
  1343.     rts
  1344. kpend:    bsr.b csbeg
  1345. csbot:    move.b rowsm1-base(a6),d2
  1346.     cmp.b row-base(a6),d2
  1347.     beq.w pagedwn
  1348.     move.b d2,row-base(a6)
  1349. csr0:    rts
  1350. pageup:    move.b col-base(a6),d2
  1351.     movem.l d1-d2/d7/a0,-(a7)
  1352.     lea txtscr-base(a6),a5
  1353.     lea 2(a5),a3            ;addrstart
  1354.     bsr.w atolong            ;get top addr
  1355.     moveq #$40,d1
  1356.     cmp.w #">;",(a5)        ;ascii dump
  1357.     lea acore(pc),a4
  1358.     beq.w dopageu
  1359.     moveq #$10,d1
  1360.     cmp.w #">:",(a5)        ;hex dump
  1361.     lea mcore(pc),a4
  1362.     beq.w dopageu
  1363.  
  1364.     cmp.b #">",(a5)
  1365.     bne.b nobpgu
  1366.     move.b 1(a5),d2
  1367.     bsr binsize        ;returns d1
  1368.     beq.b nobpgu
  1369.     lea bincore(pc),a4
  1370.     bra.b dopageu
  1371.  
  1372. nobpgu:    moveq #4,d1
  1373.     cmp.w #">.",(a5)        ;copper dump
  1374.     lea ccore(pc),a4
  1375.     beq.b dopageu
  1376.     cmp.w #">_",(a5)        ;6502 disasm
  1377.     lea dis6502(pc),a3
  1378.     lea pgdis65(pc),a4
  1379.     beq.b dopcpu
  1380.     lea disasm(pc),a3
  1381.     lea pgdis(pc),a4
  1382.     cmp.w #">,",(a5)        ;disasm
  1383.     bne.b nopageu
  1384.     btst #0,d0
  1385.     bne.b nopageu
  1386.  
  1387. dopcpu:    lea dostrkbuf-base(a6),a0
  1388.     move.l a0,-(a7)
  1389.     move.l d0,a5
  1390.     sub.w #400,a5
  1391.     move.l a5,d1
  1392.     bpl.b dpag0
  1393.     sub.l a5,a5
  1394. dpag0:    move.l a5,(a0)+
  1395.     jsr (a3)
  1396.     cmp.l a5,d0
  1397.     bhi.b dpag0
  1398.     moveq #0,d0
  1399.     move.b rowsm2-base(a6),d0
  1400.     lsl.w #2,d0
  1401.     sub.l d0,a0
  1402.     move.l (a7)+,a1
  1403.     cmp.l a0,a1
  1404.     bls.b nounder
  1405.     move.l a1,a0
  1406. nounder:move.l (a0),d0
  1407.     moveq #0,d1
  1408. dopageu:sf row-base(a6)
  1409.     moveq #0,d6
  1410.     move.b rowsm2-base(a6),d6
  1411.     move.w d6,-(a7)
  1412.     mulu d1,d6
  1413.     sub.l d6,d0
  1414.     bpl.b pgupos
  1415.     moveq #0,d0
  1416. pgupos:    move.l d0,a5
  1417.     move.l d0,para-base(a6)
  1418.     move.w (a7)+,d6
  1419. pguloop:jsr (a4)
  1420.     dbf d6,pguloop
  1421.     moveq #">",d0
  1422.     bsr rawchr
  1423. nopageu:movem.l (a7)+,d1-d2/d7/a0
  1424.     move.b d2,col-base(a6)
  1425.     sf row-base(a6)
  1426.     rts
  1427.  
  1428. pagedwn:lea txtscr-base(a6),a5    ;bottom+1 line
  1429.     moveq #0,d2
  1430.     move.b rowsm2-base(a6),d2
  1431.     mulu #xchars,d2
  1432.     add.l d2,a5
  1433.     move.b col-base(a6),d2
  1434.     movem.l d1-d2/d7/a0,-(a7)
  1435.  
  1436.     lea 2(a5),a3            ;addrstart
  1437.     bsr.w atolong            ;get top addr
  1438.     cmp.w #">;",(a5)        ;ascii dump
  1439.     lea acore(pc),a4
  1440.     beq.b dopage
  1441.     cmp.w #">:",(a5)        ;hex dump
  1442.     lea mcore(pc),a4
  1443.     beq.b dopage
  1444.  
  1445.     cmp.b #">",(a5)
  1446.     bne.b nobpg
  1447.     move.b 1(a5),d2
  1448.     bsr binsize        ;returns d1
  1449.     beq.b nobpg
  1450.     lea bincore(pc),a4
  1451.     bra.b dopage
  1452.  
  1453. nobpg:    cmp.w #">.",(a5)        ;copper dump
  1454.     lea ccore(pc),a4
  1455.     beq.b dopage
  1456.     cmp.w #">_",(a5)        ;6502 disasm
  1457.     lea pgdis65(pc),a4
  1458.     beq.b dopage
  1459.     
  1460.     btst #0,d0            ;even disasm adr?
  1461.     bne.b nopage
  1462.     lea pgdis(pc),a4
  1463.     cmp.w #">,",(a5)        ;disassemble
  1464.     bne.b nopage
  1465.  
  1466. dopage:    move.l d0,para-base(a6)
  1467.     move.l d0,a5
  1468.     move.b #">",linebuf-base(a6)
  1469.     bsr rawout
  1470.     sf row-base(a6)
  1471.     moveq #0,d6
  1472.     move.b rowsm2-base(a6),d6
  1473. pgloop:    move.b rowsm1-base(a6),d0
  1474.     cmp.b row-base(a6),d0
  1475.     beq.b pgfull
  1476.     jsr (a4)
  1477. pgfull:    dbf d6,pgloop
  1478. nopage:    movem.l (a7)+,d1-d2/d7/a0
  1479.     move.b d2,col-base(a6)
  1480.     rts
  1481. pgdis:    bsr disasm
  1482.     bsr hlbrkpt
  1483.     bsr rawline
  1484.     bsr hdlline
  1485.     move.l a5,para-base(a6)
  1486.     rts
  1487. pgdis65:bsr dis6502
  1488.     move.l a5,para-base(a6)
  1489.     bra rawline
  1490.  
  1491. csright:addq.b #1,col-base(a6)
  1492.     cmp.b #xchars,col-base(a6)
  1493.     bne.w csr0
  1494.     sf col-base(a6)
  1495. csdown:    addq.b #1,row-base(a6)
  1496.     move.b rows-base(a6),d0
  1497.     cmp.b row-base(a6),d0
  1498.     bne.w csr0
  1499.     subq.b #1,row-base(a6)
  1500.     bra.w scroll
  1501. csdownroll:
  1502.     addq.b #1,row-base(a6)
  1503.     move.b rows-base(a6),d0
  1504.     cmp.b row-base(a6),d0
  1505.     bne.w csr0
  1506.     subq.b #1,row-base(a6)
  1507.     sf rolltop-base(a6)
  1508.     bra.b rollscr
  1509.  
  1510. csleft:    tst.b col-base(a6)
  1511.     beq.b csl0
  1512.     subq.b #1,col-base(a6)
  1513.     rts
  1514. csl0:    tst.b row-base(a6)
  1515.     beq.b csl1
  1516.     subq.b #1,row-base(a6)
  1517.     move.b #xchars-1,col-base(a6)
  1518. csl1:    rts
  1519. csup:    st rolltop-base(a6)
  1520.     tst.b row-base(a6)
  1521.     beq.b rollscr        ;beq.b csu0
  1522.     subq.b #1,row-base(a6)
  1523. csu0:    rts
  1524.  
  1525. csend:    move.b #xchars,col-base(a6)
  1526.     bsr crsrtxt
  1527.     move.l a5,a4
  1528.     moveq #xchars-3,d0
  1529. csend1:    cmp.b #";",-(a4)
  1530.     bne.b csend2
  1531.     move.l a4,a5
  1532.     bra.b csend0
  1533. csend2:    subq.b #1,col-base(a6)
  1534.     dbf d0,csend1
  1535.  
  1536.     move.b #xchars,col-base(a6)
  1537.     subq.w #1,a5
  1538.     moveq #xchars-3,d0
  1539. csend0:    subq.b #1,col-base(a6)
  1540.     cmp.b #" ",-(a5)
  1541.     dbne d0,csend0
  1542.     rts
  1543.  
  1544. rollscr:tst.b rolltop-base(a6)
  1545.     beq.b rollsc0
  1546.     bsr.w scrdown            ;scroll screen down
  1547.     lea txtscr+xchars-base(a6),a5
  1548.     bra.b rollsc1
  1549. rollsc0:bsr.w scroll
  1550.     move.b rowsm2-base(a6),row-base(a6)
  1551.     lea txtscr-base(a6),a5        ;*****
  1552.     moveq #0,d2
  1553.     move.b rows-base(a6),d2
  1554.     subq.w #3,d2
  1555.     mulu #xchars,d2
  1556.     add.l d2,a5
  1557. rollsc1:move.b col-base(a6),d2
  1558.     movem.l d1-d2/d7/a0,-(a7)
  1559.  
  1560.     lea 2(a5),a3            ;addrstart
  1561.     bsr.w atolong            ;get top addr
  1562.     pea endup(pc)
  1563.     cmp.w #">;",(a5)        ;ascii dump
  1564.     beq.w upascii
  1565.     cmp.w #">:",(a5)        ;hex dump
  1566.     beq.w uphex
  1567.     cmp.w #">|",(a5)
  1568.     beq.w upbinb
  1569.     cmp.w #">]",(a5)
  1570.     beq.b upbinw
  1571.     cmp.w #">[",(a5)
  1572.     beq.b upbinl
  1573.     cmp.w #">}",(a5)
  1574.     beq.b upbint
  1575.     cmp.w #">{",(a5)
  1576.     beq.b upbinq
  1577.  
  1578.     cmp.w #">.",(a5)        ;copper dump
  1579.     beq.b upcop
  1580.     cmp.w #">_",(a5)        ;6502 disasm
  1581.     beq.w up6502
  1582.     
  1583.     btst #0,d0            ;even disasm adr?
  1584.     bne.b noupdis
  1585.     cmp.w #">,",(a5)        ;disassemble
  1586.     beq.w updis
  1587. noupdis:subq.w #4,a7            ;remove endup from stack
  1588. membeg:    addq.w #8,a7            ;remove endup/subroutine
  1589. endup:    sf row-base(a6)
  1590.     tst.b rolltop-base(a6)
  1591.     bne.b endup2
  1592.     move.b rowsm1-base(a6),row-base(a6)
  1593. endup2:    sf col-base(a6)
  1594.     bsr.w rprompt            ;>
  1595.     movem.l (a7)+,d1-d2/d7/a0
  1596.     move.b d2,col-base(a6)
  1597.     rts
  1598.  
  1599. upbinq:    moveq #8,d1
  1600.     pea binq(pc)
  1601.     bra.b setpara
  1602. upbint:    moveq #6,d1
  1603.     pea bint(pc)
  1604.     bra.b setpara
  1605. upbinl:    moveq #4,d1
  1606.     pea binl(pc)
  1607.     bra.b setpara
  1608. upbinw:    moveq #2,d1
  1609.     pea binw(pc)
  1610.     bra.b setpara
  1611. upbinb:    moveq #1,d1
  1612.     pea binb(pc)
  1613.     bra.b setpara
  1614. upcop:    moveq #4,d1
  1615.     pea copper(pc)
  1616.     bra.b setpara
  1617. uphex:    moveq #16,d1
  1618.     pea m(pc)
  1619.     bra.b setpara
  1620. upascii:moveq #64,d1
  1621.     pea a(pc)
  1622. setpara:add.l d1,d0
  1623.     tst.b rolltop-base(a6)
  1624.     beq.b setpar0
  1625.     sub.l d1,d0
  1626.     sub.l d1,d0
  1627.     bmi.b membeg
  1628. setpar0:move.l d0,para-base(a6)
  1629.     add.l d1,d0
  1630.     move.l d0,para+4-base(a6)
  1631.     moveq #2,d3
  1632.     rts
  1633.  
  1634. up6502:    tst.b rolltop-base(a6)
  1635.     beq.b down65
  1636.     moveq #3*5+3,d1        ;max opcode len 6502: 3 bytes
  1637. upred65:subq.w #1,d1
  1638.     beq.b endup65
  1639.     move.l d0,a5
  1640.     sub.l d1,a5
  1641.     move.l a5,d4        ;start below 0?
  1642.     bpl.b upd652
  1643.     sub.l a5,a5    
  1644. upd652:    moveq #3*5-1,d4        ;maxbyte(3):minbyte(1)=3
  1645. upd65m:    bsr.w dis6502
  1646.     cmp.l d0,a5        ;disassembly matching?
  1647.     beq.b upd650
  1648.     bhi.b upd651
  1649.     dbf d4,upd65m
  1650. upd651:    bra.b upred65
  1651. upd650:    bsr.b downrl
  1652.     sf row-base(a6)
  1653. endup65:rts
  1654. down65:    move.l d0,a5
  1655.     bsr.w dis6502
  1656.     bsr.w dis6502
  1657.     move.l a5,para-base(a6)
  1658. downrl:    bra.w rawline
  1659.  
  1660. updis:    tst.b rolltop-base(a6)
  1661.     beq.b downdis
  1662.     moveq #10*5+2,d1    ;max opcode len MC68000: 10 bytes
  1663. upredis:subq.w #2,d1
  1664.     beq.b endupd
  1665.     move.l d0,a5
  1666.     sub.l d1,a5
  1667.     move.l a5,d4        ;start below 0?
  1668.     bpl.b updis2
  1669.     sub.l a5,a5    
  1670. updis2:    moveq #5*5-1,d4        ;maxbyte(10):minbyte(2)=5
  1671. updsm:    move.l a5,para-base(a6)
  1672.     bsr.w disasm
  1673.     cmp.l d0,a5        ;disassembly matching?
  1674.     beq.b updis0
  1675.     bhi.b updis1
  1676.     dbf d4,updsm
  1677. updis1:    bra.b upredis
  1678. updis0:    bsr hlbrkpt
  1679.  
  1680.     bsr.w hdltest        ;2 lines?
  1681.     bne.b noline
  1682.     bsr.w scrdown
  1683. noline:    bsr.w rawline
  1684.     bsr.w hdlline
  1685.     sf row-base(a6)
  1686. endupd:    rts
  1687. downdis:move.l d0,a5
  1688.  
  1689.     bsr.w disasm
  1690.     move.l a5,para-base(a6)
  1691.     bsr.w disasm
  1692.     bsr hlbrkpt
  1693.     bsr rawline
  1694.     bsr hdlline
  1695.     move.l a5,para-base(a6)
  1696.     rts
  1697.  
  1698. clrhome:pea rprompt(pc)        ;>    
  1699. clrscr:    move.l scradr-base(a6),a5    ;the lame stuff...
  1700.     moveq #0,d0
  1701.     moveq #0,d5
  1702.     move.b rows-base(a6),d5
  1703.     mulu #xchars*8/4,d5
  1704.     subq.w #1,d5
  1705. ch0:    move.l d0,(a5)+
  1706.     dbf d5,ch0
  1707.     lea txtscr-base(a6),a5
  1708.     moveq #" ",d0
  1709.     moveq #0,d5
  1710.     move.b rows-base(a6),d5
  1711.     mulu #xchars,d5
  1712.     subq.w #1,d5
  1713. ch1:    move.b d0,(a5)+
  1714.     dbf d5,ch1
  1715.     lea linebuf-base(a6),a5
  1716.     moveq #xchars-1,d5
  1717. ch2:    move.b d0,(a5)+
  1718.     dbf d5,ch2
  1719.     sf row-base(a6)
  1720.     sf col-base(a6)
  1721.     rts
  1722.  
  1723. insert:    bsr.w crsrtxt
  1724.     move.l a5,a4
  1725.     bsr.w crsrbm
  1726.     moveq #xchars-1-1,d2
  1727.     move.b col-base(a6),d3
  1728.     ext.w d3
  1729.     sub.w d3,d2
  1730.     lea (a5,d2.w),a5
  1731.     lea (a4,d2.w),a4
  1732.     bcs.b ins2
  1733. ins0:    moveq #8-1,d3
  1734. ins3:    move.b (a5),1(a5)
  1735.     lea xpixel/8(a5),a5
  1736.     dbf d3,ins3
  1737.     lea -xpixel-1(a5),a5
  1738.     move.b (a4)+,(a4)
  1739.     subq.w #2,a4
  1740.     dbf d2,ins0
  1741. ins2:    moveq #8-1,d5
  1742. ins1:    sf 1(a5)
  1743.     lea xpixel/8(a5),a5
  1744.     dbf d5,ins1
  1745.     move.b #" ",1(a4)
  1746. bs0:    rts            ;two
  1747. backspc:;tst.b col-base(a6)
  1748.     ;beq.b bs0
  1749.     cmp.b #1,col-base(a6)
  1750.     bls.s bs0
  1751.     bsr.w csleft
  1752. del:    bsr.w crsrtxt
  1753.     move.l a5,a4
  1754.     bsr.w crsrbm
  1755.     moveq #xchars-1-1,d2
  1756.     sub.b col-base(a6),d2
  1757.     bcs.b del2
  1758. del0:    moveq #8-1,d5
  1759. del4:    move.b 1(a5),(a5)
  1760.     lea xpixel/8(a5),a5
  1761.     dbf d5,del4
  1762.     lea -xpixel+1(a5),a5
  1763.     move.b 1(a4),(a4)+
  1764.     dbf d2,del0
  1765. del2:    moveq #8-1,d5
  1766. del3:    sf (a5)
  1767.     lea xpixel/8(a5),a5
  1768.     dbf d5,del3
  1769.     move.b #" ",(a4)
  1770.     rts
  1771.  
  1772. swapbuf:movem.l d1/a0,-(a7)        ;no a0,d1,d7
  1773.     move.w row-base(a6),-(a7)
  1774.     lea txtscr-base(a6),a1
  1775.     moveq #0,d2
  1776.     move.b rows-base(a6),d2
  1777.     mulu #xchars/4,d2
  1778.     subq.w #1,d2
  1779. swpbuf:    move.l txtback-txtscr(a1),d3
  1780.     move.l (a1),txtback-txtscr(a1)
  1781.     move.l d3,(a1)+
  1782.     dbf d2,swpbuf
  1783.     sf row-base(a6)
  1784.     lea txtscr-base(a6),a1
  1785.     moveq #0,d2
  1786.     move.b rowsm1-base(a6),d2
  1787. swplp:    lea linebuf-base(a6),a0
  1788.     moveq #xchars-1,d0
  1789. cpybck:    move.b (a1)+,(a0)+
  1790.     dbf d0,cpybck
  1791.     bsr.w rawout
  1792.     addq.b #1,row-base(a6)
  1793.     dbf d2,swplp
  1794.     move.w rowback-base(a6),row-base(a6)
  1795.     move.w (a7)+,rowback-base(a6)    ;row,col
  1796.     movem.l (a7)+,d1/a0
  1797.     rts
  1798.  
  1799. help:    movem.l d1/a0,-(a7)
  1800.     bsr.w clrhome
  1801.     sf col-base(a6)
  1802.     moveq #0,d2
  1803.     move.b rowsm2-base(a6),d2
  1804.     move.l helpadr-base(a6),a1
  1805. hlp0:    tst.b (a1)
  1806.     beq.b endhlp
  1807.     lea linebuf-base(a6),a0
  1808.     bsr.w txttobuf
  1809.     lea linebuf+22-base(a6),a0
  1810.     bsr.w txttobuf
  1811.     tst.b (a1)
  1812.     beq.b endhlp2
  1813.     lea linebuf+39-base(a6),a0
  1814.     move.b #"|",(a0)+
  1815.     bsr.w txttobuf
  1816.     lea linebuf+62-base(a6),a0
  1817.     bsr.w txttobuf
  1818. endhlp2:bsr.w rawline
  1819.     dbf d2,hlp0
  1820.     tst.b (a1)
  1821.     bne.b hlp2
  1822. endhlp:    lea helptxt-$7ffe(pc),a1
  1823.     lea $7ffe(a1),a1
  1824. hlp2:    move.l a1,helpadr-base(a6)
  1825.     bsr.w rprompt        ;>
  1826.     movem.l (a7)+,d1/a0
  1827.     rts
  1828. enter:    movem.l d1/d7/a0,-(a7)
  1829.     move.b col-base(a6),d6
  1830.     sf col-base(a6)
  1831.     bsr.w csdown
  1832.     bsr.w crsrtxt    ;a5 !
  1833.     lea -xchars(a5),a5
  1834.  
  1835.     cmp.b #">",(a5)
  1836.     bne.w igncmd
  1837.  
  1838.     lea cmd(pc),a3
  1839.     lea cmdjmp-2(pc),a4
  1840. scanagn:sf d2
  1841.     lea 1(a5),a0
  1842.     cmp.b #" ",(a0)
  1843.     beq.b scancmd
  1844.     lea lastcmd-base(a6),a1
  1845.     move.b (a0)+,(a1)+
  1846.     move.b (a0)+,(a1)+
  1847.     move.b (a0)+,(a1)+
  1848.     move.b (a0),(a1)
  1849.     subq.w #3,a0
  1850. scancmd:move.b (a3),d0
  1851.     beq.w igncmd
  1852.     move.b (a0)+,d1
  1853.     tst.b d2
  1854.     bne.b nomatch
  1855.     bclr #7,d0
  1856.     cmp.b d0,d1
  1857.     sne d2
  1858. nomatch:btst #7,(a3)+
  1859.     beq.b scancmd
  1860.     addq.w #2,a4
  1861.     tst.b d2
  1862.     bne.b scanagn
  1863.     move.w (a4),d3
  1864.     lea cmdjmp(pc),a4
  1865.     add.w d3,a4
  1866.  
  1867.     cmp.b #" ",1(a5)
  1868.     beq.b inhist1        ;no cmd
  1869.     lea histcnt-base(a6),a1
  1870.     lea histbuf-base(a6),a2
  1871.     moveq #0,d3
  1872.     move.b (a1),d3            ;histcnt
  1873.     divu #histnum,d3
  1874.     swap d3
  1875.     mulu #xchars-1,d3
  1876.     add.l d3,a2
  1877.     moveq #xchars-1-1,d2
  1878. inhist:    move.b 1(a5,d2.w),(a2,d2.w)    ;skip >
  1879.     dbf d2,inhist
  1880.     add.b #1,(a1)            ;histcnt
  1881.     cmp.b #histnum,(a1)        ;histcnt
  1882.     bne.b inhist0
  1883.     sf (a1)                ;histcnt
  1884. inhist0:move.b (a1),histlin-histcnt(a1)    ;histcnt->histlin
  1885. inhist1:
  1886.  
  1887.     lea para-base(a6),a3
  1888.     sub.l a2,a2
  1889.     moveq #0,d3
  1890. skpblk:    lea xchars-1(a5),a1
  1891. ah3:    cmp.b #"'",(a0)
  1892.     beq.b ah5
  1893.     cmp.b #" ",(a0)
  1894.     bne.b endskip
  1895.     addq.w #1,a0
  1896.     cmp.l a0,a1
  1897.     bne.b ah3
  1898. endskip:
  1899.     moveq #8-1,d2        ;maxlen    ; convert cmd data
  1900.     moveq #0,d0
  1901. ah0:    cmp.l a0,a1
  1902.     beq.b endline
  1903.     move.b (a0)+,d1
  1904.     cmp.b #" ",d1
  1905.     beq.b ah1
  1906.     sub.b #"0",d1
  1907.     bcs.b ah5
  1908.     cmp.b #9,d1
  1909.     ble.b ah2
  1910.     bclr #5,d1
  1911.     cmp.b #"A"-"0",d1
  1912.     blt.b ah5
  1913.     cmp.b #"F"-"0",d1
  1914.     bgt.b ah5
  1915.     subq.b #"A"-"0"-10,d1    
  1916. ah2:    lsl.l #4,d0
  1917.     or.b d1,d0
  1918.     dbf d2,ah0
  1919. ah1:    move.l d0,(a3)+
  1920.  
  1921.     addq.b #1,d3
  1922. ah4:    cmp.b #16,d3
  1923.     bne.b ah3
  1924. ah5:
  1925.     sf d7
  1926.     subq.w #1,a0
  1927.  
  1928.     move.l a5,a2
  1929. ah6:    cmp.b #34,(a2)+
  1930.     beq.b ah7
  1931.     cmp.l a2,a1
  1932.     bne.b ah6
  1933.     sub.l a2,a2
  1934. ah7:
  1935.  
  1936. endline:move.l a5,lineend-base(a6)
  1937.     moveq #xchars,d0
  1938.     add.l d0,lineend-base(a6)
  1939.         
  1940.     ;d3:#para,d6:oldcol,a0:stop,a2:quote,a5:cmdtxt / st d7:ok
  1941.     jsr (a4)    ;execute cmd...
  1942.  
  1943.     tst.b d7
  1944.     bne.b truecmd
  1945.  
  1946.     moveq #"?",d0
  1947.     bsr.w rawchr
  1948. igncmd:    moveq #"?",d0
  1949.     bsr.w rawchr
  1950. shent:    bsr.w csdown
  1951.     sf col-base(a6)
  1952. truecmd:tst.b col-base(a6)
  1953.     bne.b nnspec
  1954.     bsr.w rprompt        ;>
  1955. nnspec:    movem.l (a7)+,d1/d7/a0
  1956.     rts
  1957. shenter:movem.l d1/d7/a0,-(a7)    ;no cmd execution
  1958.     bra.b shent
  1959.  
  1960. cursoff:bset #0,nocrsr-base(a6)
  1961.     btst #1,nocrsr-base(a6)
  1962.     beq.b coff0
  1963. coff1:    bra.w chgcrsr
  1964. curson:    btst #1,nocrsr-base(a6)
  1965.     bne.b crson0
  1966.     bsr.b coff1
  1967. crson0:    bclr #0,nocrsr-base(a6)
  1968. coff0:    rts
  1969.  
  1970. rawprt:    move.l d1,-(a7)
  1971.     moveq #xchars-1,d1        ;print onto printer if online
  1972.     lea linebuf-base(a6),a0
  1973. rp0:    btst #0,$bfd000
  1974.     bne.b noprt
  1975.     move.b (a0)+,d0
  1976.     bsr.b chrprt
  1977.     dbf d1,rp0
  1978.     moveq #13,d0        ;CR
  1979.     bsr.b chrprt
  1980.     moveq #11,d0        ;LF
  1981.     bsr.b chrprt
  1982.     move.l (a7)+,d1
  1983.     rts
  1984. chrprt:    move.b d0,$bfe101
  1985.     moveq #100,d0
  1986. waitprt:tst.b 4.w
  1987.     dbf d0,waitprt
  1988. wprt2:    btst #0,$bfd000
  1989.     beq.b noprt
  1990.     btst #2,$dff016
  1991.     bne.b wprt2
  1992. noprt:    rts
  1993.     
  1994. rawline:tst.b prtflag-base(a6)    ;col = 0 !
  1995.     beq.b noprint
  1996.     bsr.b rawprt
  1997. noprint:            ;del: d0,a0
  1998.     bsr.b rawout
  1999.     lea linebuf-base(a6),a0
  2000.     sf col-base(a6)
  2001.     bra.w csdown
  2002.  
  2003. rawout:    movem.l d1/d2/d3/a1-a5,-(a7)    ;del: d0,a0
  2004.     move.l a6,-(a7)
  2005.     lea linebuf-base(a6),a0
  2006.     lea font-base(a6),a1
  2007.     move.l scradr-base(a6),a2
  2008.     move.l a1,d3
  2009.     moveq #0,d0
  2010.     move.b row-base(a6),d0
  2011.     mulu #xchars,d0
  2012.     lea txtscr-base(a6),a6
  2013.     add.w d0,a6
  2014.     lsl.l #3,d0
  2015.     add.l d0,a2
  2016.     lea xpixel/8(a2),a3
  2017.     lea xpixel/8(a3),a4
  2018.     lea xpixel/8(a4),a5
  2019.     
  2020.     moveq #xchars-1,d2
  2021. rl0:    moveq #0,d0
  2022.     move.b (a0),d0        ;char
  2023.  
  2024.     moveq #$60,d1
  2025.     and.b d0,d1        ;0-1f,80-9f?
  2026.     bne.b rln1
  2027.     moveq #" ",d0
  2028. rln1:    moveq #" ",d1
  2029.     move.b d0,(a6)+        ;ascii
  2030.     bpl.b rln2
  2031.     sub.b d1,d0
  2032. rln2:    sub.b d1,d0        ;fontindex
  2033.  
  2034.     move.b d1,(a0)+        ;" ",clr linebuf
  2035.  
  2036.     lsl.w #3,d0
  2037.     move.l d3,a1
  2038.     add.w d0,a1
  2039.  
  2040.     move.b (a1)+,(a2)+
  2041.     move.b (a1)+,(a3)+
  2042.     move.b (a1)+,(a4)+
  2043.     move.b (a1)+,(a5)+
  2044.     move.b (a1)+,xpixel/8*4-1(a2)
  2045.     move.b (a1)+,xpixel/8*4-1(a3)
  2046.     move.b (a1)+,xpixel/8*4-1(a4)
  2047.     move.b (a1),xpixel/8*4-1(a5)
  2048.     dbf d2,rl0
  2049.  
  2050.     move.l (a7)+,a6
  2051.     tst.b hilight-base(a6)
  2052.     beq.b nohighl
  2053.     moveq #8-1,d2
  2054.     lea -xchars+2(a2),a2
  2055. rlhigh:    not.l (a2)
  2056.     not.l 4(a2)
  2057.     lea xchars(a2),a2
  2058.     dbf d2,rlhigh
  2059.     sf hilight-base(a6)
  2060. nohighl:movem.l (a7)+,d1/d2/d3/a1-a5
  2061.  
  2062.     bra pushcache
  2063.  
  2064. crsrtxt:lea txtscr-base(a6),a5    ;gimme pointers
  2065.     moveq #0,d5
  2066.     move.b col-base(a6),d5
  2067.     add.l d5,a5
  2068.     move.b row-base(a6),d5
  2069.     mulu #xchars,d5
  2070.     add.l d5,a5
  2071.     rts
  2072.  
  2073. rprompt:moveq #">",d0
  2074. rawchr:    movem.l d0-d1/d5/a2/a5,-(a7)
  2075.     bsr.b crsrtxt
  2076.  
  2077.     moveq #$60,d1
  2078.     and.b d0,d1        ;0-1f,80-9f?
  2079.     bne.b rc1
  2080.     moveq #" ",d0
  2081. rc1:    moveq #" ",d1
  2082.     move.b d0,(a5)        ;ascii
  2083.     bpl.b rc2
  2084.     sub.b d1,d0
  2085. rc2:    sub.b d1,d0    
  2086.     and.w #$ff,d0        ;fontindex
  2087.  
  2088.     bsr.b crsrbm
  2089.     lea font-base(a6),a2
  2090.     lsl.w #3,d0
  2091.     add.w d0,a2
  2092.  
  2093.     moveq #xpixel/8,d5
  2094.     move.b (a2)+,(a5)
  2095.     add.w d5,a5
  2096.     move.b (a2)+,(a5)
  2097.     add.w d5,a5
  2098.     move.b (a2)+,(a5)
  2099.     add.w d5,a5
  2100.     move.b (a2)+,(a5)
  2101.     add.w d5,a5
  2102.     move.b (a2)+,(a5)
  2103.     add.w d5,a5
  2104.     move.b (a2)+,(a5)
  2105.     add.w d5,a5
  2106.     move.b (a2)+,(a5)
  2107.     add.w d5,a5
  2108.     move.b (a2),(a5)
  2109.  
  2110.     bsr.w csright
  2111.     movem.l (a7)+,d0-d1/d5/a2/a5
  2112.     bra pushcache
  2113.     
  2114. crsrbm:    move.l scradr-base(a6),a5    ;more pointers
  2115.     moveq #0,d5
  2116.     move.b col-base(a6),d5
  2117.     add.l d5,a5
  2118.     move.b row-base(a6),d5
  2119.     mulu #xpixel/8*8,d5
  2120.     add.l d5,a5
  2121.     rts
  2122. scroll:    movem.l d0/a1-a2,-(a7)
  2123.     lea $dff000,a2
  2124.     bsr.w waitblt
  2125. waitfrm:btst #0,5(a2)            ;$dff005, screen done?
  2126.     bne.b waitfrm
  2127.     move.l #$09f00000,$40(a2)    ;$dff040 scroll up
  2128.     moveq #-1,d0    
  2129.     move.l d0,$44(a2)        ;$dff044
  2130.     moveq #0,d0
  2131.     move.l d0,$64(a2)        ;$dff064 clr.l forbidden!
  2132.     move.l scradr-base(a6),a1
  2133.     move.l a1,$54(a2)        ;$dff054
  2134.     lea xpixel/8*8(a1),a1
  2135.     move.l a1,$50(a2)        ;$dff050
  2136.     move.b rowsm1-base(a6),d0    ;word
  2137.     ror.w #7,d0
  2138.     add.w #xchars/2,d0
  2139.     move.w d0,$58(a2)    ;$dff058 start blit
  2140.  
  2141.     lea txtscr-base(a6),a1
  2142.     moveq #0,d0
  2143.     move.b rowsm1-base(a6),d0
  2144.     mulu #xchars/4,d0
  2145.     subq.w #1,d0
  2146. scup2:    move.l xchars(a1),(a1)+
  2147.     dbf d0,scup2
  2148.     moveq #xchars-1,d0
  2149. scup3:    move.b #" ",(a1)+
  2150.     dbf d0,scup3
  2151.  
  2152.     bsr.b waitblt
  2153.  
  2154.     moveq #0,d0
  2155.     move.w d0,$74(a2)        ;$dff074 clr.w forbidden
  2156.     move.l #$01f00000,$40(a2)    ;$dff040 clr bottom
  2157.     move.l scradr-base(a6),a1
  2158.     moveq #0,d0
  2159.     move.b rowsm1-base(a6),d0
  2160.     mulu #xchars*8,d0
  2161.     add.l d0,a1
  2162.     move.l a1,$54(a2)        ;$dff054
  2163.     move.w #8*64+40,$58(a2)        ;$dff058
  2164.  
  2165.     bsr.b waitblt
  2166.     movem.l (a7)+,d0/a1-a2
  2167.     rts
  2168. waitblt:
  2169.     ;move.w #$8400,$96(a2)        ;$dff096, we are nasty
  2170. waibl:    btst #14,$02(a2)        ;$dff002
  2171.     bne.b waibl
  2172.     ;move.w #$0400,$96(a2)        ;$dff096, we are neat
  2173.     rts
  2174.  
  2175. scrdown:movem.l d0/a1-a2,-(a7)
  2176.     lea $dff000,a2
  2177.     bsr.b waitblt
  2178. wfrm0:    btst #0,5(a2)            ;$dff005, screen done?
  2179.     bne.b wfrm0
  2180.     move.l #$09f00002,$40(a2)    ;$dff040 scroll down
  2181.     moveq #-1,d0    
  2182.     move.l d0,$44(a2)        ;$dff044
  2183.     moveq #0,d0
  2184.     move.l d0,$64(a2)        ;$dff064 clr.l forbidden!
  2185.     move.l scradr-base(a6),a1
  2186.     move.b rowsm1-base(a6),d0
  2187.     mulu #xchars*8,d0
  2188.     subq.w #2,d0
  2189.     add.l d0,a1
  2190.     move.l a1,$50(a2)        ;$dff050
  2191.     lea xpixel/8*8(a1),a1
  2192.     move.l a1,$54(a2)        ;$dff054
  2193.     moveq #0,d0
  2194.     move.b rowsm1-base(a6),d0    ;word
  2195.     ror.w #7,d0
  2196.     add.w #xchars/2,d0
  2197.     move.w d0,$58(a2)        ;$dff058 start blit
  2198.  
  2199.     lea txtscr-base(a6),a1
  2200.     moveq #0,d0
  2201.     move.b rowsm1-base(a6),d0
  2202.     mulu #xchars,d0
  2203.     add.l d0,a1
  2204.     lsr.w #2,d0
  2205.     subq.w #1,d0
  2206. scdw2:    move.l -(a1),xchars(a1)
  2207.     dbf d0,scdw2
  2208.     moveq #xchars-1,d0
  2209. scdw3:    move.b #" ",(a1)+
  2210.     dbf d0,scdw3
  2211.  
  2212.     bsr.w waitblt
  2213.  
  2214.     moveq #0,d0
  2215.     move.w d0,$74(a2)        ;$dff074 clr.w forbidden
  2216.     move.l #$01f00000,$40(a2)    ;$dff040 clr top
  2217.     move.l scradr-base(a6),a1
  2218.     move.l a1,$54(a2)        ;$dff054
  2219.     move.w #8*64+40,$58(a2)        ;$dff058
  2220.  
  2221.     bsr.w waitblt
  2222.     movem.l (a7)+,d0/a1-a2
  2223.     rts
  2224.  
  2225. audint:    movem.l d0/d1/a0/a1/a6,-(a7)    ;the soundint
  2226.     lea base-$7ffe(pc),a6
  2227.     lea $7ffe(a6),a6
  2228.     lea $dff000,a0            ;play any length(>128k!)
  2229.  
  2230.     moveq #127,d0
  2231. au0:    tst.b 4.w
  2232.     dbf d0,au0
  2233.  
  2234.     move.l para+4-base(a6),d1
  2235.     move.l para-base(a6),d0
  2236.     sub.l d0,d1
  2237.     bls.b au1
  2238.  
  2239.     moveq #sndintstep,d0
  2240.     cmp.l d0,d1
  2241.     bls.b au3
  2242.     move.l d0,d1
  2243. au3:    move.l para-base(a6),$a0(a0)    ;$dff0a0
  2244.     move.l para-base(a6),$b0(a0)    ;$dff0b0
  2245.     add.l d1,para-base(a6)    ;the online counter...
  2246.     lsr.l #1,d1
  2247.     move.w d1,$a4(a0)    ;$dff0a4
  2248.     move.w d1,$b4(a0)    ;$dff0b4
  2249.  
  2250.     move.w para+10-base(a6),d0
  2251.     moveq #124,d1
  2252.     cmp.w d1,d0
  2253.     bcc.b au4
  2254.     move.w d1,d0
  2255. au4:    move.w d0,$a6(a0)    ;$dff0a6
  2256.     move.w d0,$b6(a0)    ;$dff0b6
  2257.     moveq #64,d0        ;volume
  2258.     move.w d0,$a8(a0)    ;$dff0a8
  2259.     move.w d0,$b8(a0)    ;$dff0b8
  2260.     move.w #$8003,$96(a0)    ;$dff096
  2261.     bra.b au2
  2262.     
  2263. au1:    clr.l para+4-base(a6)
  2264.     move.w #$0080,$9a(a0)    ;$dff09a
  2265. au2:    move.w #$0080,$9c(a0)    ;$dff09c clr sndint
  2266.     movem.l (a7)+,d0/d1/a0/a1/a6
  2267.     rte
  2268.  
  2269. vblint:    movem.l d0-d7/a0-a6,-(a7)
  2270.     lea base-$7ffe(pc),a6
  2271.     lea $7ffe(a6),a6
  2272.     lea $dff000,a5
  2273.  
  2274.     tst.b frzflag-base(a6)        ;did we freeze?
  2275.     beq.b mutil3
  2276.  
  2277.     moveq #0,d0
  2278.     btst #0,modeflg-base(a6)
  2279.     beq.b vblnlc
  2280.     tst.w 4(a5)
  2281.     bmi.b vblnlc
  2282.     moveq #xchars,d0
  2283. vblnlc:    add.l scradr-base(a6),d0
  2284.     move.l d0,$e0(a5)    ;cpu=copper?
  2285.     bsr initcop
  2286. mutil3:
  2287.     lea $bfe001,a4
  2288.     move.l spradr-base(a6),a0
  2289.     lea $120(a5),a1        ;$dff120
  2290.     move.l a0,(a1)+
  2291.     lea 72(a0),a0
  2292.     moveq #7-1,d0
  2293. sprptr:    move.l a0,(a1)+
  2294.     dbf d0,sprptr
  2295.  
  2296.     move.b $0a(a5),d0    ;$dff00a set mousecursor
  2297.     move.b mousexy+1-base(a6),d1
  2298.     move.b d0,mousexy+1-base(a6)
  2299.     sub.b d1,d0
  2300.     ext.w d0
  2301.     add.w d0,msypos-base(a6)
  2302.     move.w d0,d1
  2303.     muls d0,d0        ;parabolic
  2304.     cmp.w #25,d0
  2305.     bhi.b mou6
  2306.     tst.w d1
  2307.     bpl.b mou5
  2308.     neg.w d0
  2309.     bra.b mou5
  2310. mou6:    move.w d1,d0
  2311.     muls #5,d0        ;linear
  2312. mou5:    muls #xpixel/8,d0
  2313.     sub.l d0,msycnt-base(a6)
  2314.     move.b $0b(a5),d0    ;$dff00b
  2315.     move.b mousexy-base(a6),d1
  2316.     move.b d0,mousexy-base(a6)
  2317.     sub.b d1,d0
  2318.     ext.w d0
  2319.     ext.l d0
  2320.     move.l d0,d1
  2321.     ;divs #2,d0
  2322.     add.w d0,msxpos-base(a6)
  2323.     sub.l d1,msycnt-base(a6)
  2324.     bpl.b mou4
  2325.     clr.l msycnt-base(a6)
  2326. mou4:    move.w msypos-base(a6),d0
  2327.     cmp.w #40,d0
  2328.     bhi.b mou2
  2329.     moveq #40,d0
  2330. mou2:    moveq #0,d1
  2331.     move.b modeflg-base(a6),d1
  2332.     add.w d1,d1
  2333.     move.w msymax(pc,d1.w),d1
  2334.     bra.b moucmp
  2335. msymax:    dc.w 256+39,256+39,200+39,200+39,480+39
  2336. moucmp:    cmp.w d1,d0
  2337.     bls.b mou3
  2338.     move.w d1,d0
  2339. mou3:    move.w d0,msypos-base(a6)
  2340.     move.w msxpos-base(a6),d1
  2341.     cmp.w #60,d1
  2342.     bhi.b mou0
  2343.     moveq #60,d1
  2344. mou0:    cmp.w #219,d1
  2345.     bls.b mou1
  2346.     move.w #219,d1
  2347. mou1:    move.w d1,msxpos-base(a6)
  2348.  
  2349.     btst #0,nocrsr-base(a6)
  2350.     bne.w nosetcs
  2351.     move.w #$0020,$96(a5)    ;$dff096
  2352.     moveq #0,d0
  2353.     move.l d0,$144(a5)    ;$dff144
  2354.     move.w $0a(a5),d0    ;$dff00a
  2355.     cmp.w lastms-base(a6),d0
  2356.     beq.b noblnk
  2357.     move.w d0,lastms-base(a6)
  2358.     move.b #100,msdel-base(a6)
  2359. noblnk:    tst.b msdel-base(a6)
  2360.     beq.w nosetcs
  2361.     subq.b #1,msdel-base(a6)
  2362.     move.w #$8020,$96(a5)    ;$dff096
  2363.  
  2364.     moveq #-60,d1
  2365.     add.w msxpos-base(a6),d1
  2366.     lsr.b #1,d1
  2367.  
  2368.     moveq #-40,d2
  2369.     add.w msypos-base(a6),d2
  2370.     btst #0,modeflg-base(a6)
  2371.     beq.b mounlc2
  2372.     add.w d2,d2
  2373. mounlc2:lsr.w #3,d2
  2374.  
  2375.     btst #0,nocrsr-base(a6)    ;ignore snap if no cursor blink
  2376.     bne.b nosnap
  2377.     btst #10,$16(a5)    ;$dff016
  2378.     bne.b norms
  2379.     st rmsflag-base(a6)
  2380.     bra.b nosnap
  2381. norms:    tst.b rmsflag-base(a6)
  2382.     beq.b nosnap
  2383.     
  2384.     bsr.w cursoff
  2385.     sf rmsflag-base(a6)
  2386.     mulu #xpixel/8,d2        ;csrrow
  2387. snap0:    lea txtscr-base(a6),a0
  2388.     add.w d1,a0        ;csrcol
  2389.     add.w d2,a0
  2390.     move.b (a0),d0
  2391.     cmp.b #" ",d0        ;eot
  2392.     beq.b noseton
  2393.     cmp.b #":",d0        ;skip :
  2394.     beq.b snap1
  2395.     cmp.b #"$",d0        ;skip $
  2396.     beq.b snap1
  2397.     cmp.b #"-",d0        ;skip -
  2398.     bne.b snap2
  2399.     moveq #" ",d0
  2400. snap2:    bsr.w rawchr
  2401. snap1:    addq.b #1,d1        ;col
  2402.     cmp.b #xchars-1,d1
  2403.     bls.b snap0
  2404.     bsr.w curson
  2405.     
  2406. nosnap:    btst #6,(a4)        ;$bfe001
  2407.     bne.b nosetcs
  2408.     bsr.w cursoff
  2409.     move.b d1,col-base(a6)
  2410.     move.b d2,row-base(a6)
  2411. noseton:bsr.w curson
  2412. nosetcs:
  2413.     move.l spradr-base(a6),a0    ;setspr
  2414.     move.w msypos-base(a6),d0
  2415.     sf 3(a0)
  2416.     btst #8,d0
  2417.     beq.b mvert0
  2418.     bset #2,3(a0)
  2419. mvert0:    move.b d0,(a0)
  2420.     add.w #17,d0
  2421.     btst #9,d0        ;multiscan, lower border
  2422.     beq.b mvert2
  2423.     move.w #$1ff,d0
  2424. mvert2:    btst #8,d0
  2425.     beq.b mvert1
  2426.     bset #1,3(a0)
  2427. mvert1:    move.b d0,2(a0)
  2428.     move.b msxpos+1-base(a6),d0
  2429.     cmp.b #4,modeflg-base(a6)
  2430.     bne.b nmsmous
  2431.     addq.b #4,d0
  2432.     btst #0,d0
  2433.     beq.b bit0zer
  2434.     bset #0,3(a0)
  2435. bit0zer:lsr.b #1,d0
  2436. nmsmous:move.b d0,1(a0)
  2437.  
  2438.     move.b ascii-base(a6),d0;keysub,delay and repeat...
  2439.     beq.b rk0
  2440.     cmp.b #$1b,d0        ;escape
  2441.     beq.b rk0
  2442.     cmp.b prvkey-base(a6),d0
  2443.     bne.b rk1
  2444.     cmp.b #20,repdel-base(a6)
  2445.     beq.b rk2
  2446.     addq.b #1,repdel-base(a6)
  2447.     bra.b rk3
  2448. rk2:    cmp.b #1,d0            ;sh-csup fast key repeat
  2449.     beq.b rkfast
  2450.     cmp.b #2,d0            ;sh-csdown fast key repeat
  2451.     beq.b rkfast
  2452.     cmp.b #$10,d0            ;csup fast key repeat
  2453.     beq.b rkfast
  2454.     cmp.b #$11,d0            ;csdown
  2455.     beq.b rkfast
  2456.     cmp.b #$0d,d0            ;return
  2457.     beq.b rkfast
  2458.     addq.b #1,keydel-base(a6)    ;slow key repeat
  2459.     move.b rateflg-base(a6),d1
  2460.     cmp.b keydel-base(a6),d1
  2461.     bcc.b rk3
  2462. rkfast:    sf keydel-base(a6)
  2463.     bsr.b bufit
  2464.     bra.b rk3
  2465. rk1:    move.b d0,prvkey-base(a6)
  2466. rk0:    sf repdel-base(a6)
  2467. rk3:
  2468.     bsr.b cursor
  2469.  
  2470.     tst.w count-base(a6)
  2471.     beq.b vbltime
  2472.     subq.w #1,count-base(a6)
  2473. vbltime:move.w #$0070,$9c(a5)    ;$dff09c
  2474.     movem.l (a7)+,d0-d7/a0-a6
  2475.     rte
  2476.  
  2477. cursor:    btst #0,nocrsr-base(a6)
  2478.     bne.b crsr0
  2479.     subq.b #1,crsrdel-base(a6)
  2480.     bne.b crsr0
  2481.     move.b #10,crsrdel-base(a6)
  2482. chgcrsr:movem.l d5/a5,-(a7)
  2483.     bsr.w crsrbm
  2484.     moveq #8-1,d5
  2485. chgcsln:not.b (a5)
  2486.     lea xpixel/8(a5),a5
  2487.     dbf d5,chgcsln
  2488.     bchg #1,nocrsr-base(a6)
  2489.     movem.l (a7)+,d5/a5
  2490. crsr0:    rts
  2491.  
  2492. bufit:    movem.l d0-d1/a0,-(a7)
  2493.     tst.b dontbuf-base(a6)
  2494.     bne.b ign0
  2495.     lea keybuf-base(a6),a0
  2496.     move.w buflen-base(a6),d1
  2497.     beq.b bufit0
  2498.     cmp.w #40,d1
  2499.     bge.b ign0
  2500.     cmp.b #1,d0        ;shift-csup?
  2501.     beq.b bufit1
  2502.     cmp.b #2,d0        ;shift-csdown?
  2503.     beq.b bufit1
  2504.     cmp.b #13,d0
  2505.     bne.b bufit0
  2506. bufit1:    cmp.b -1(a0,d1.w),d0
  2507.     beq.b ign0
  2508. bufit0:    move.b d0,(a0,d1.w)
  2509.     addq.w #1,buflen-base(a6)
  2510. ign0:    movem.l (a7)+,d0-d1/a0
  2511.     rts
  2512.  
  2513. keyint:    movem.l d0/d1/a0/a4/a6,-(a7)
  2514.     lea $dff006,a4
  2515.     move.w #$0008,$9a-6(a4)    ;$dff09a
  2516.     lea base-$7ffe(pc),a6
  2517.     lea $7ffe(a6),a6
  2518.     btst #3,$bfed01        ;ciaa icr sp?
  2519.     beq.w key0
  2520.     moveq #0,d0
  2521.     move.b $bfec01,d0
  2522.     bset #6,$bfee01        ;cia sp out
  2523.     st $bfec01
  2524.     not.b d0
  2525.     lsr.w #1,d0
  2526.     bcs.b keyoff
  2527.     cmp.b #$60,d0        ;any shifting?
  2528.     blt.b key2
  2529.     cmp.b #$67,d0
  2530.     bhi.b key3
  2531.     bset d0,shflag-base(a6)
  2532.     bra.b key3
  2533. key2:    moveq #7,d1
  2534.     and.b shflag-base(a6),d1
  2535.     beq.b key4
  2536.     cmp.b #$45,d0        ;rawcode esc
  2537.     bne.b key7
  2538.     cmp.b #"g",lastcmd-base(a6)
  2539.     bne.b key7
  2540.     lea gg1(pc),a0        ;stack cleanup
  2541.     move.l 5*4+2(a7),breakpc-base(a6)
  2542.     move.l a0,5*4+2(a7)
  2543.     bra.b key3
  2544. key7:    add.w #$60,d0
  2545. key4:    lea keytab-base(a6),a0
  2546.     move.b (a0,d0.w),d0
  2547.     beq.b key3
  2548.     move.b d0,ascii-base(a6)
  2549.     cmp.b #$1b,d0        ;escape
  2550.     beq.b key3
  2551.     bsr.w bufit
  2552.     bra.b key3
  2553. keyoff:    cmp.b #$60,d0        ;any shifting?
  2554.     blt.b key5
  2555.     cmp.b #$67,d0
  2556.     bhi.b key3
  2557.     bclr d0,shflag-base(a6)
  2558.     bra.b key3
  2559. key5:    sf ascii-base(a6)
  2560.  
  2561. key3:    moveq #4-1,d0
  2562. key6:    move.b (a4),d1
  2563. key1:    cmp.b (a4),d1
  2564.     beq.b key1
  2565.     dbf d0,key6
  2566.     bclr #6,$bfee01        ;ciaa sp in
  2567. key0:
  2568.     move.w #$0008,$9c-6(a4)    ;$dff09c
  2569.     move.w #$8008,$9a-6(a4)    ;$dff09a
  2570.     movem.l (a7)+,d0/d1/a0/a4/a6
  2571.     rte
  2572. ; here come the commands..
  2573.     dc.b "$VER:BeerMon 0."
  2574.     dc.b version/10+"0",-version/10*10+version+"0",0
  2575. cmd:    dc.b "S"!$80
  2576.     dc.b "L"!$80
  2577.     dc.b "verify"!$80
  2578.     dc.b "vc"!$80
  2579.     dc.b "v"!$80
  2580.     dc.b "smd2raw"!$80
  2581.     dc.b "famiplay"!$80
  2582.     dc.b "rawplay"!$80
  2583.     dc.b "smdplay"!$80
  2584.     dc.b "settt0"!$80
  2585.     dc.b "settt1"!$80
  2586.     dc.b "settc"!$80
  2587.     dc.b "setsrp"!$80
  2588.     dc.b "setcrp"!$80
  2589.     dc.b "setdrp"!$80
  2590.     dc.b "setmmusr"!$80
  2591.     dc.b "s"!$80
  2592.     dc.b "l"!$80
  2593.     dc.b "D"!$80
  2594.     dc.b "accu"!$80
  2595.     dc.b "index"!$80
  2596.     dc.b "auto"!$80
  2597.     dc.b "install"!$80
  2598.     dc.b "info"!$80
  2599.     dc.b "imp"!$80
  2600.     dc.b "i"!$80
  2601.     dc.b "p"!$80
  2602.     dc.b "gary"!$80
  2603.     dc.b "g"!$80
  2604.     dc.b "h"!$80
  2605.     dc.b "?"!$80
  2606.     dc.b "ramsey"!$80
  2607.     dc.b "r"!$80
  2608.     dc.b "R"!$80
  2609.     dc.b "match"!$80
  2610.     dc.b "mmuon"!$80
  2611.     dc.b "mmuoff"!$80
  2612.     dc.b "mmu"!$80
  2613.     dc.b "mk"!$80
  2614.     dc.b "megasum"!$80
  2615.     dc.b "famisum"!$80
  2616.     dc.b "m"!$80
  2617.     dc.b ":"!$80
  2618.     dc.b "a"!$80
  2619.     dc.b ";"!$80
  2620.     dc.b "x"!$80
  2621.     dc.b "X"!$80
  2622.     dc.b "ow"!$80
  2623.     dc.b "ol"!$80
  2624.     dc.b "o"!$80
  2625.     dc.b "exp"!$80
  2626.     dc.b "ew"!$80
  2627.     dc.b "el"!$80
  2628.     dc.b "e"!$80
  2629.     dc.b "cd"!$80
  2630.     dc.b "cls"!$80
  2631.     dc.b "cop"!$80
  2632.     dc.b "config"!$80
  2633.     dc.b "custom"!$80
  2634.     dc.b "c"!$80
  2635.     dc.b "format"!$80
  2636.     dc.b "fi"!$80
  2637.     dc.b "fmode"!$80
  2638.     dc.b "f"!$80
  2639.     dc.b "F"!$80
  2640.     dc.b "time"!$80
  2641.     dc.b "type"!$80
  2642.     dc.b "t"!$80
  2643.     dc.b "/"!$80
  2644.     dc.b "V"!$80
  2645.     dc.b "."!$80
  2646.     dc.b "W"!$80
  2647.     dc.b "datasum"!$80
  2648.     dc.b "del"!$80
  2649.     dc.b "dir"!$80
  2650.     dc.b "ds"!$80
  2651.     dc.b "dm"!$80
  2652.     dc.b "dv"!$80
  2653.     dc.b "d"!$80
  2654.     dc.b "u"!$80
  2655.     dc.b "_"!$80
  2656.     dc.b "N"!$80
  2657.     dc.b "nop"!$80
  2658.     dc.b ","!$80
  2659.     dc.b "n"!$80
  2660.     dc.b "K"!$80
  2661.     dc.b "B"!$80
  2662.     dc.b "bootsum"!$80
  2663.     dc.b "bitsum"!$80
  2664.     dc.b "binw"!$80
  2665.     dc.b "]"!$80
  2666.     dc.b "binl"!$80
  2667.     dc.b "["!$80
  2668.     dc.b "bint"!$80
  2669.     dc.b "}"!$80
  2670.     dc.b "binq"!$80
  2671.     dc.b "{"!$80
  2672.     dc.b "bin"!$80
  2673.     dc.b "|"!$80
  2674.     dc.b "bc"!$80
  2675.     dc.b "bs"!$80
  2676.     dc.b "bl"!$80
  2677.     dc.b "b"!$80
  2678.     dc.b "M"!$80
  2679.     dc.b "P"!$80
  2680.     dc.b "kicksum"!$80
  2681.     dc.b "k"!$80
  2682.     dc.b " "!$80,0
  2683.     even
  2684. cmdjmp:    dc.w save-cmdjmp,load-cmdjmp,verify-cmdjmp
  2685.     dc.w srcsync-cmdjmp,syncw-cmdjmp
  2686.     dc.w smd2raw-cmdjmp,famplay-cmdjmp,rawplay-cmdjmp,smdplay-cmdjmp
  2687.     dc.w settt0-cmdjmp,settt1-cmdjmp,settc-cmdjmp,setsrp-cmdjmp
  2688.     dc.w setcrp-cmdjmp,setdrp-cmdjmp,setmusr-cmdjmp
  2689.     dc.w sblk-cmdjmp,lblk-cmdjmp,drive-cmdjmp
  2690.     dc.w accu-cmdjmp,index-cmdjmp,auto-cmdjmp
  2691.     dc.w install-cmdjmp,info-cmdjmp,implode-cmdjmp,i-cmdjmp,p-cmdjmp
  2692.     dc.w gary-cmdjmp,g-cmdjmp,hunk-cmdjmp
  2693.     dc.w calc-cmdjmp,ramsey-cmdjmp,r-cmdjmp,rfpu-cmdjmp
  2694.     dc.w match-cmdjmp
  2695.     dc.w mmuon-cmdjmp,mmuoff-cmdjmp,rmmu-cmdjmp
  2696.     dc.w makedir-cmdjmp,megasum-cmdjmp,famisum-cmdjmp
  2697.     dc.w m-cmdjmp,mm-cmdjmp,a-cmdjmp,aa-cmdjmp,x-cmdjmp,xclr-cmdjmp
  2698.     dc.w ow-cmdjmp,ol-cmdjmp,ob-cmdjmp
  2699.     dc.w explode-cmdjmp,ew-cmdjmp,el-cmdjmp,eb-cmdjmp
  2700.     dc.w cd-cmdjmp,cls-cmdjmp,huntcop-cmdjmp
  2701.     dc.w config-cmdjmp,custom-cmdjmp,c-cmdjmp,format-cmdjmp
  2702.     dc.w fd-cmdjmp,fmode-cmdjmp,f-cmdjmp,frel-cmdjmp
  2703.     dc.w time-cmdjmp,type-cmdjmp,t-cmdjmp
  2704.     dc.w sysinfo-cmdjmp,copper-cmdjmp,copass-cmdjmp
  2705.     dc.w work-cmdjmp,dtsum-cmdjmp
  2706.     dc.w delete-cmdjmp,catalog-cmdjmp
  2707.     dc.w ds-cmdjmp,dm-cmdjmp,dv-cmdjmp,d-cmdjmp
  2708.     dc.w d6502-cmdjmp,n6502-cmdjmp,nass65-cmdjmp
  2709.     dc.w nopit-cmdjmp,n-cmdjmp,nass-cmdjmp,setkey-cmdjmp,color-cmdjmp
  2710.     dc.w btsum-cmdjmp,bisum-cmdjmp
  2711.     dc.w binw-cmdjmp,edbinw-cmdjmp,binl-cmdjmp,edbinl-cmdjmp
  2712.     dc.w bint-cmdjmp,edbint-cmdjmp
  2713.     dc.w binq-cmdjmp,edbinq-cmdjmp,binb-cmdjmp,edbinb-cmdjmp
  2714.     dc.w bpclr-cmdjmp,bpset-cmdjmp,bplist-cmdjmp,bpl-cmdjmp
  2715.     dc.w map-cmdjmp,print-cmdjmp,kisum-cmdjmp,setmap-cmdjmp
  2716.     dc.w spc-cmdjmp
  2717.  
  2718. x:    bra.w exit
  2719. save:    lea 2(a5),a0
  2720.     bsr.w getfilename    ;a0:txt>a0:endname,a2:name,d4.w:len
  2721.     move.w d4,para+12-base(a6)
  2722.     beq.w svq
  2723.     cmp.w #30,d4
  2724.     bhi.w svq
  2725.     bsr.w skipspc
  2726.     bhi.w svq
  2727.     move.l a0,a3
  2728.     bsr.w atolong
  2729.     move.l d0,para-base(a6)
  2730.     move.l a3,a0
  2731.     bsr.w skipspc
  2732.     bhi.w svq
  2733.     move.l a0,a3
  2734.     bsr.w atolong
  2735.     move.l d0,para+4-base(a6)
  2736.     beq.w svq
  2737.     move.l para-base(a6),d1
  2738.     cmp.l d0,d1
  2739.     bhi.w svq
  2740.     move.l d1,para+8-base(a6)
  2741.  
  2742.     st wrcmd-base(a6)
  2743.     st wrflag-base(a6)
  2744.  
  2745.     bsr.w initdosdrive    ;reads root/dir
  2746.     bne.w sv1
  2747.  
  2748.     move.l a2,a0
  2749.     bsr.w fnhash        ;a0:str,d4.w:fnlen>d4.w:rootidx,d5:blk
  2750.     beq.b sv5        ;hash entry zero?
  2751.  
  2752.     bsr.w searchfile    ;d5:1st hash,a2:fname
  2753.                 ;>prevchain,a4:header
  2754.     beq.b sv5
  2755.     bsr.w fexists
  2756.     bra.w sv1
  2757.     
  2758. sv5:    tst.b dskerr-base(a6)
  2759.     bne.w sv1
  2760.  
  2761.     bsr.w cntfree
  2762.     beq.w savfull
  2763.     movem.l para-base(a6),d0-d1
  2764.     sub.l d0,d1
  2765.     beq.b sv19
  2766.     bsr maxfile
  2767.     cmp.l d0,d1
  2768.     bls.b sv19
  2769.     bsr notenou
  2770.     bra.w sv1
  2771.  
  2772. sv19:    bsr.w getfreehead    ;fileheader
  2773.     beq.w savfull
  2774.     move.l d0,a3        ;headerkey
  2775.     move.l d0,fheader-base(a6)
  2776.     clr.w datanum-base(a6)    ;cnt datablk
  2777.  
  2778.     lea header-base(a6),a5
  2779.     move.l a5,a0
  2780.     moveq #512/4-1,d6
  2781. sv2:    clr.l (a0)+
  2782.     dbf d6,sv2
  2783.  
  2784.     lea $149(a5),a1        ;bcpl filenote
  2785.     move.l a1,a0
  2786.     move.l para-base(a6),d0
  2787.     bsr.w longtoa_
  2788.     move.b #"-",(a0)+
  2789.     move.l para+4-base(a6),d0
  2790.     bsr.w longtoa_
  2791.     sub.l a1,a0
  2792.     move.w a0,d0
  2793.     move.b d0,-(a1)        ;strlen
  2794.     
  2795.     bsr.w getclok
  2796.     move.l days-base(a6),$1a4(a5)
  2797.     move.l mins-base(a6),$1a8(a5)
  2798.     move.l ticks-base(a6),$1ac(a5)
  2799.  
  2800.     lea linebuf+1-base(a6),a0
  2801.     lea savetxt-base(a6),a1
  2802.     bsr.w txttobuf
  2803.     move.w para+12-base(a6),d0    ;fnlen!
  2804.     subq.w #1,d0
  2805.     lea $1b1(a5),a1        ;copy bcplname
  2806. sv4:    move.b (a2),(a1)+
  2807.     move.b (a2)+,(a0)+
  2808.     addq.b #1,$1b0(a5)
  2809.     dbf d0,sv4
  2810.     move.b #34,(a0)+
  2811.     bsr.w rawline
  2812.     bsr.w csdown
  2813. ;;;
  2814.     move.l roothash-base(a6),a1
  2815.     clr.l linkkey-base(a6)
  2816.     move.l (a1),d5        ;root entry free?
  2817.     beq.b fhroot
  2818. sortfh:    cmp.l fheader-base(a6),d5    ;root entry higher?
  2819.     bhi.b fhroot
  2820.     move.l d5,linkkey-base(a6)
  2821.     lea rootblk-base(a6),a4
  2822.     move.l a4,d6
  2823.     bsr.w getsec
  2824.     tst.b dskerr-base(a6)
  2825.     bne.w sv1
  2826.     move.l $1f0(a4),d5    ;hashchain
  2827.     bne.b sortfh
  2828. fhroot:    move.l d5,$1f0(a5)    ;set hashchain
  2829. ;;;
  2830.     move.l dirkey-base(a6),$1f4(a5)    ;fileheader parent
  2831.  
  2832.     move.l para+4-base(a6),d0
  2833.     sub.l para-base(a6),d0
  2834.     move.l d0,$144(a5)    ;filesize
  2835.     move.l d0,filesiz-base(a6)
  2836.     beq.b sv14        ;empty file:no datablk
  2837.  
  2838.     bsr.w getfree
  2839.     beq.w savfull
  2840.     move.l d0,d4
  2841.  
  2842. ;;;;;;;    take care of registers...
  2843. sv14:    moveq #2,d6
  2844. sv18:    move.l d6,(a5)        ;primary type fheader
  2845.     moveq #-3,d6
  2846.     move.l d6,$1fc(a5)    ;secondary type fileheader
  2847.     move.l a3,4(a5)        ;own key
  2848.  
  2849.     lea $134+4(a5),a4    ;1st data
  2850.     tst.l filesiz-base(a6)    ;empty?
  2851.     move.l para+4-base(a6),a1    ;set eof
  2852.     beq.w svempty
  2853.  
  2854. sv8:    move.l d4,-(a4)
  2855.     addq.l #1,8(a5)        ;datas in this header (OFS)
  2856.  
  2857.     lea rootblk+512-base(a6),a0    ;rootblk=datablkbuffer
  2858.     moveq #512/4-1,d6    
  2859. sv9:    clr.l -(a0)
  2860.     dbf d6,sv9
  2861.  
  2862.     move.l para+4-base(a6),d0
  2863.     sub.l para+8-base(a6),d0
  2864.     subq.l #1,d0
  2865.     divu datasiz-base(a6),d0
  2866.     tst.w d0        ;another data?
  2867.     beq.b sv17
  2868.     
  2869.     bsr.w getfree
  2870.     beq.w savfull
  2871.     move.l d0,d4
  2872.     move.l d4,$10(a0)    ;nextdata (OFS)    
  2873.     
  2874. sv17:    move.l para+8-base(a6),a1
  2875.     move.l a0,a2
  2876.     moveq #0,d0        ;bytecnt
  2877.     tst.b ffs-base(a6)
  2878.     bne.b sv10
  2879.     lea $18(a0),a2        ;OFS dataoffset
  2880. sv10:    cmp.l para+4-base(a6),a1
  2881.     bcc.b sv11
  2882.     move.b (a1)+,(a2)+
  2883.     addq.w #1,d0        ;bytes inblk
  2884.     cmp.w datasiz-base(a6),d0    ;has been cleared
  2885.     bne.b sv10
  2886.  
  2887. sv11:    move.l a1,para+8-base(a6)
  2888.     pea rootblk-base(a6)    ;\
  2889.     move.l (a7)+,d6        ;/
  2890.     move.l (a4),d5        ;datakey !!
  2891.     tst.b ffs-base(a6)
  2892.     bne.b svffs
  2893.  
  2894.     move.l d0,12(a0)        ;# databytes in this blk
  2895.     moveq #8,d0            ;OFS!
  2896.     move.l d0,(a0)            ;type
  2897.     addq.w #1,datanum-base(a6)
  2898.     move.w datanum-base(a6),8+2(a0)    ;datanum
  2899.     move.l fheader-base(a6),4(a0)    ;dataownkey=fileheader!
  2900.     bsr.w datasum
  2901.     move.l d3,20(a0)
  2902.  
  2903. svffs:    bsr.w putsec        ;save data
  2904.     tst.b dskerr-base(a6)
  2905.     bne.w sv1
  2906.  
  2907. svempty:lea linebuf+1-base(a6),a0
  2908.     move.l para-base(a6),d0
  2909.     move.l para+8-base(a6),d1
  2910.     bsr.w csup
  2911.     bsr.w twolong_
  2912.     bsr.w rawline
  2913.     bsr.w stopit
  2914.     beq.w sv1
  2915.  
  2916.     cmp.l para+4-base(a6),a1    ;next filelist or eof?
  2917.     beq.b sv15
  2918.  
  2919.     moveq #72,d6
  2920.     cmp.l 8(a5),d6        ;(OFS)!
  2921.     bne.b sv12
  2922.  
  2923.     bsr.w getfree        ;filelist between datablk
  2924.     beq.w savfull
  2925.     move.l d0,a3
  2926.     move.l d0,$1f8(a5)    ;filelist
  2927.  
  2928. sv15:    move.l a5,a0
  2929.     move.l $134(a0),$10(a0)    ;1st data
  2930.     bsr.w datasum
  2931.     move.l d3,20(a0)
  2932.     move.l 4(a0),d5
  2933.     move.l a0,d6
  2934.     bsr.w putsec        ;save header
  2935.     tst.b dskerr-base(a6)
  2936.     bne.b sv1
  2937.  
  2938.     cmp.l para+4-base(a6),a1    ;eof
  2939.     beq.b sv16
  2940.  
  2941.     moveq #512/4-1,d6
  2942. sv13:    clr.l (a0)+
  2943.     dbf d6,sv13
  2944.     move.l fheader-base(a6),$1f4(a5)
  2945.     moveq #$10,d6        ;primary type:filelist
  2946.     bra.w sv18
  2947.  
  2948. sv12:    cmp.l para+4-base(a6),a1    ;eof
  2949.     bcs.w sv8
  2950.     
  2951. sv16:    lea rootblk-base(a6),a2
  2952.     move.l a2,d6            ;rootblk/dirblk
  2953.     lea rootblk+$1f0-base(a6),a2    ;hashchain
  2954.     move.l linkkey-base(a6),d5
  2955.     bne.b sortfhd
  2956.     move.l roothash-base(a6),a2
  2957.     move.l dirkey-base(a6),d5
  2958. sortfhd:bsr.w getsec
  2959.     tst.b dskerr-base(a6)
  2960.     bne.b sv1
  2961.  
  2962.     move.l fheader-base(a6),(a2)        ;insert fileheader
  2963.     lea rootblk-base(a6),a0            ;root/fheader chk
  2964.     bsr.w datasum
  2965.     move.l d3,20(a0)
  2966.     bsr.w putsec            ;write root/fheader
  2967.     tst.b dskerr-base(a6)
  2968.     bne.b sv1
  2969.  
  2970.     bsr.w bitsum
  2971.     lea bitmap-base(a6),a0
  2972.     move.l a0,d6
  2973.     move.l bitsec-base(a6),d5
  2974.     bsr.w putsec
  2975.     tst.b dskerr-base(a6)
  2976.     bne.b sv1
  2977.  
  2978.     bsr.w updatedisk
  2979. sv1:    bsr.w motoff
  2980.     st d7
  2981. svq:    rts
  2982. savfull:bsr.w dskfull
  2983.     bra.b sv1
  2984.  
  2985. freeblk:cmp.l lastkey-base(a6),d0    ;too much is too much...
  2986.     bhi.b freeb0
  2987.     lea bitmap-base(a6),a0
  2988.     subq.l #2,d0
  2989.     bmi.b freeb0
  2990.     move.l d0,d1
  2991.     lsr.w #5,d1
  2992.     add.w d1,d1
  2993.     add.w d1,d1        ;lsl.w #2,d1    
  2994.     move.l 4(a0,d1.w),d2
  2995.     bset d0,d2
  2996.     bne.b freeb0
  2997.     move.l d2,4(a0,d1.w)
  2998.     moveq #-1,d0
  2999.     rts
  3000. freeb0:    moveq #0,d0
  3001.     rts
  3002.  
  3003. getfreehead:move.l rootkey-base(a6),d0    ;collect the headers a bit..
  3004.     bsr.b getf2
  3005.     beq.b getfree
  3006.     rts
  3007. getfree:moveq #0,d0        ;d0,d1,d2>d0
  3008. getf2:    move.l a0,-(a7)
  3009.     lea bitmap-base(a6),a0
  3010. getf1:    move.w d0,d1
  3011.     lsr.w #5,d1
  3012.     add.w d1,d1        ;lsl.w #2,d1
  3013.     add.w d1,d1
  3014.     move.l 4(a0,d1.w),d2
  3015.     bclr d0,d2
  3016.     bne.b getf0
  3017.     addq.l #1,d0
  3018.     cmp.l lastkeym1-base(a6),d0
  3019.     bne.b getf1
  3020.     moveq #-2,d0
  3021. getf0:    move.l d2,4(a0,d1.w)
  3022.     move.l (a7)+,a0
  3023.     addq.l #2,d0        ;beq.b nofree
  3024.     rts
  3025.  
  3026. bitsum:    lea bitmap-base(a6),a0        ;a0:bitmap
  3027. bitsum2:lea 4(a0),a1
  3028.     moveq #0,d1
  3029.     moveq #512/4-1-1,d0
  3030. bms0:    sub.l (a1)+,d1
  3031.     dbf d0,bms0
  3032.     move.l d1,(a0)
  3033.     rts
  3034.  
  3035. getfilename:
  3036.     clr.w d4
  3037.     bsr.b skipspc
  3038.     bhi.b fnquo2
  3039.     move.l a0,a2
  3040.     cmp.b #34,(a0)
  3041.     bne.b fnquo0
  3042.     clr.w d4
  3043.     addq.w #1,a2
  3044.     addq.w #1,a0
  3045. fnquo1:    cmp.b #34,(a0)+
  3046.     beq.b fnquo2
  3047.     addq.w #1,d4
  3048.     bra.b fnquo1
  3049. fnquo0:    bsr.b findspc
  3050.     bhi.b fnquo2
  3051.     move.l a0,d4
  3052.     sub.l a2,d4    ;fnlen
  3053. fnquo2:    tst.w d4
  3054.     rts
  3055. skipspc:cmp.b #" ",(a0)
  3056.     bne.b fnspc0
  3057.     addq.w #1,a0
  3058.     bra.b skipspc
  3059. findspc:cmp.b #" ",(a0)
  3060.     beq.b fnspc0
  3061.     addq.w #1,a0
  3062.     bra.b findspc
  3063. fnspc0:    cmp.l lineend-base(a6),a0    ;bhi.b eol
  3064.     rts
  3065.  
  3066. type:    st typeflg-base(a6)
  3067.     lea 5(a5),a0        ;type a file
  3068.     bra.b dotype
  3069. load:    sf typeflg-base(a6)
  3070.     lea 2(a5),a0        ;load a file, usual stuff...
  3071. dotype:    bsr.b getfilename    ;a0:txt>a0:endname,a2:name,d4.w:len
  3072.     move.w d4,para+12-base(a6)
  3073.     beq.w ldq
  3074.     cmp.w #30,d4
  3075.     bhi.w ldq
  3076.  
  3077.     moveq #1,d0        ;dummy destadr
  3078.     tst.b typeflg-base(a6)
  3079.     bne.b dotype0
  3080.  
  3081.     bsr.b skipspc
  3082.     bhi.w ldq
  3083.     move.l a0,a3
  3084.     bsr.w atolong
  3085. dotype0:move.l d0,para-base(a6)
  3086.     move.l d0,para+4-base(a6)
  3087.     beq.w ldq
  3088.  
  3089.     sf wrcmd-base(a6)
  3090.     sf wrflag-base(a6)
  3091.     bsr.w initdosdrive    ;reads root/dir
  3092.     bne.w ld1
  3093.  
  3094.     move.l a2,a0
  3095.     bsr.w fnhash    ;a0:str,d4.w:fnlen>d4.w:rootidx,d5:blk
  3096.     beq.b ld5    ;hash entry zero?
  3097.  
  3098.     bsr.w searchfile    ;d5:1st hash,a2:fname
  3099.                 ;>prevchain,a4:header
  3100.     bne.b ld3
  3101.  
  3102. ld5:    bsr.w fnotfnd
  3103.     bra.w ld1
  3104.  
  3105. ld3:    tst.b dskerr-base(a6)
  3106.     bne.w ld1
  3107.  
  3108.     move.l $1fc(a4),d0
  3109.     subq.l #2,d0        ;2:dir
  3110.     beq.b ld12
  3111.     subq.l #2,d0        ;4:linked dir
  3112.     beq.b ld12
  3113.     addq.l #7,d0        ;-3:file
  3114.     beq.b ld2
  3115.     addq.l #1,d0        ;-4:linked file
  3116.     bne.w ld1        ;illegal type    
  3117.     move a4,d6        ;header
  3118.     move.l $1d4(a4),d5    ;hardlink
  3119.     bsr.w getsec
  3120.     tst.b dskerr-base(a6)
  3121.     bne.w ld1
  3122.     bra.b ld2
  3123.  
  3124. ld12:    bsr.w fisdir
  3125.     bra.w ld1
  3126.  
  3127. ld2:    lea linebuf+1-base(a6),a0
  3128.     lea typetxt-base(a6),a1
  3129.     tst.b typeflg-base(a6)
  3130.     bne.b dotype3
  3131.     lea loadtxt-base(a6),a1
  3132. dotype3:bsr.w txttobuf
  3133.     move.w para+12-base(a6),d0        ;fnlen!
  3134.     subq.w #1,d0
  3135.     move.l a2,a1
  3136. ld4:    move.b (a1)+,(a0)+
  3137.     dbf d0,ld4
  3138.     move.b #34,(a0)+
  3139.     bsr.w rawline
  3140.     bsr.w csdown
  3141.  
  3142.     move.l $144(a4),filesiz-base(a6)
  3143.  
  3144. ld6:    moveq #72,d3        ;max #datablk in header
  3145.     lea $134+4(a4),a3    ;blkmap
  3146.  
  3147. ld8:    tst.b typeflg-base(a6)
  3148.     bne.b dotype1
  3149.     lea linebuf+1-base(a6),a0
  3150.     move.l para-base(a6),d0
  3151.     move.l para+4-base(a6),d1
  3152.     bsr.w twolong_
  3153.     bsr.w csup
  3154.     bsr.w rawline
  3155.  
  3156. dotype1:bsr.w stopit
  3157.     beq.w ld1
  3158.  
  3159.     subq.l #1,d3
  3160.     bmi.w ld7
  3161.     move.l -(a3),d5
  3162.     lea rootblk-base(a6),a0
  3163.     move.l a0,d6        ;databuf
  3164.  
  3165.     bsr.w getsec
  3166.     tst.b dskerr-base(a6)
  3167.     bne.w ld1
  3168.     
  3169.     move.l filesiz-base(a6),d0    ;filesize
  3170.     beq.w ld1        ;empty file
  3171.     sub.l para+4-base(a6),d0    ;\
  3172.     add.l para-base(a6),d0        ;/loaded bytes
  3173.     beq.w ld1
  3174.  
  3175.     subq.l #1,d0
  3176.     divu datasiz-base(a6),d0
  3177.     tst.w d0
  3178.     bne.b ldblk
  3179.     swap d0
  3180.     addq.w #1,d0
  3181.     bra.b ldrest
  3182. ldblk:    move.w datasiz-base(a6),d0
  3183. ldrest:
  3184.     
  3185.     tst.b ffs-base(a6)
  3186.     bne.b ldffs
  3187.     lea $18(a0),a0        ;datastart
  3188. ldffs:    tst.b typeflg-base(a6)
  3189.     beq.b doload
  3190.  
  3191.     ext.l d0
  3192.     add.l d0,para+4-base(a6)
  3193.     move.l d0,d1
  3194. ldtype0:subq.w #1,d1
  3195.     bmi.b ldtype1
  3196.  
  3197.     bsr.w stopit
  3198.     beq.b ld1
  3199.     cmp.b #xchars,col-base(a6)
  3200.     bne.b ldtype5
  3201.     addq.w #1,d1
  3202.     bra.b ldtype4
  3203. ldtype5:move.b (a0)+,d0
  3204.     cmp.b #LF,d0
  3205.     bne.b ldtype2
  3206. ldtype4:sf col-base(a6)
  3207.     bsr csdown
  3208.     bra.b ldtype3
  3209. ldtype2:bsr.w rawchr
  3210. ldtype3:bra.b ldtype0
  3211. ldtype1:
  3212.     bra.w ld8
  3213.  
  3214. doload:    move.l para+4-base(a6),a1
  3215. ld10:    subq.w #1,d0
  3216.     bmi.b ld11
  3217.     move.b (a0)+,(a1)+
  3218.     bra.b ld10
  3219. ld11:    move.l a1,para+4-base(a6)
  3220.     bra.w ld8
  3221.  
  3222. ld7:    move.l $1f8(a4),d5    ;file extension
  3223.     beq.b ld1
  3224.     move.l a4,d6
  3225.     bsr.w getsec
  3226.     tst.b dskerr-base(a6)
  3227.     bne.b ld1
  3228.     bra.w ld6
  3229.  
  3230. ld1:    tst.b typeflg-base(a6)
  3231.     beq.b dotype2
  3232.     sf col-base(a6)
  3233.     bsr csdown
  3234. dotype2:bsr.w motoff
  3235.     st d7
  3236. ldq:    rts
  3237.  
  3238. searchfile:            ;d5:1st hash,a2:fname
  3239.     lea header-base(a6),a4    ;>prevchain,a4:header
  3240.     move.l a4,d6
  3241.     clr.l prevchain-base(a6)    ;rootchain!
  3242. srfile2:bsr.w getsec
  3243.     tst.b dskerr-base(a6)        ;!!
  3244.     bne.b srerr
  3245.     lea $1b0(a4),a0        ;filename
  3246.     move.b (a0)+,d0
  3247.     move.l a2,a1
  3248. srfile0:subq.b #1,d0
  3249.     bmi.b srfile1
  3250.     move.b (a0)+,d2
  3251.     bsr.w upcase
  3252.     move.b d2,d3
  3253.     move.b (a1)+,d2
  3254.     bsr.w upcase
  3255.     cmp.b d2,d3
  3256.     beq.b srfile0
  3257.     move.l 4(a4),prevchain-base(a6)        ;prevchain
  3258.     move.l $1f0(a4),d5
  3259.     bne.b srfile2
  3260. srerr:    moveq #0,d0        ;beq.b notfnd
  3261.     rts
  3262. srfile1:moveq #-1,d0
  3263.     rts
  3264.  
  3265. bmaperr:lea bittxt-base(a6),a1    ;the errors are cummin'
  3266.     bra.b fnf0
  3267. notenou:lea nenotxt-base(a6),a1
  3268.     bra.b fnf0
  3269. dskfull:lea dskftxt-base(a6),a1
  3270.     bra.b fnf0
  3271. dnotmt:    lea dnmtxt-base(a6),a1
  3272.     bra.b fnf0
  3273. dexists:lea dextxt-base(a6),a1
  3274.     bra.b fnf0
  3275. disfile:lea diftxt-base(a6),a1
  3276.     bra.b fnf0
  3277. dnotfnd:lea dnftxt-base(a6),a1
  3278.     bra.b fnf0
  3279. fexists:lea fextxt-base(a6),a1
  3280.     bra.b fnf0
  3281. fisdir:    lea fidtxt-base(a6),a1
  3282.     bra.b fnf0
  3283. fnotfnd:lea fnftxt-base(a6),a1
  3284. fnf0:
  3285. msgout:    lea linebuf+1-base(a6),a0    ;a1:txt->a0:linebuf
  3286.     bsr.w txttobuf
  3287.     bra.w rawline
  3288.  
  3289. fnhash:    move.l d4,d0
  3290.     clr.w d2
  3291.     subq.w #1,d0
  3292. fn1:    mulu #13,d4
  3293.     move.b (a0)+,d2
  3294.     bsr.b hashcnv
  3295.     add.w d2,d4
  3296.     and.w #$7ff,d4
  3297.     dbf d0,fn1
  3298.     divu #72,d4
  3299.     swap d4
  3300.     addq.w #6,d4
  3301.     add.w d4,d4        ;lsl.w #2,d4
  3302.     add.w d4,d4
  3303.     lea rootblk-base(a6),a0
  3304.     lea (a0,d4.w),a0
  3305.     move.l a0,roothash-base(a6)
  3306.     move.l (a0),d5
  3307.     rts
  3308. hashcnv:tst.b int-base(a6)
  3309.     beq.b upcase
  3310.     cmp.b #$f7,d2        ;international filenames
  3311.     beq.b hashcv0
  3312.     movem.l d0/d1,-(a7)
  3313.     move.b d2,d0
  3314.     move.l #"~`za",d1    ;$7e607a61
  3315.     bclr #7,d2
  3316.     beq.b hashcv1
  3317.     swap d1
  3318. hashcv1:cmp.b d1,d2
  3319.     blt.b hashcv2
  3320.     lsr.l #8,d1
  3321.     cmp.b d1,d2
  3322.     bgt.b hashcv2
  3323.     bclr #5,d0
  3324. hashcv2:move.b d0,d2
  3325.     movem.l    (a7)+,d0/d1
  3326. hashcv0:rts
  3327. upcase:    cmp.b #"a",d2
  3328.     bcs.b upcas0
  3329.     cmp.b #"z",d2
  3330.     bhi.b upcas0
  3331.     bclr #5,d2
  3332. upcas0:    rts
  3333.  
  3334. syncw:    cmp.b #1,d3        ;yo, we have a new syncword
  3335.     bhi.b syq
  3336.     tst.b d3
  3337.     beq.b sy0
  3338.     move.w para+2-base(a6),sync-base(a6)
  3339. sy0:    lea linebuf+1-base(a6),a0
  3340.     lea synctxt(pc),a1
  3341.     bsr.w txttobuf
  3342.     move.w sync-base(a6),d0
  3343.     move.w d0,d4
  3344.     bsr.w wordtoa_
  3345.  
  3346.     moveq #15-1,d0
  3347.     moveq #%11,d2
  3348.     bra.b sy5
  3349. sy6:    add.w d2,d2
  3350. sy5:    move.w d4,d1
  3351.     not.w d1
  3352.     and.w d2,d1
  3353.     dbeq d0,sy6
  3354.     beq.b sy3    ;%11 invalid
  3355.  
  3356.     moveq #13-1,d0
  3357.     moveq #%1111,d2
  3358.     bra.b sy7
  3359. sy8:    add.w d2,d2
  3360. sy7:    move.w d4,d1
  3361.     and.w d2,d1
  3362.     dbeq d0,sy8
  3363.     beq.b sy3    ;%0000 invalid
  3364.  
  3365.     moveq #14-1,d0
  3366.     moveq #%111,d2        ;a valid sync?
  3367.     bra.b sy4
  3368. sy1:    add.w d2,d2
  3369. sy4:    move.w d4,d1
  3370.     and.w d2,d1
  3371.     dbeq d0,sy1
  3372.     beq.b sy2    ;%000 suitable
  3373.  
  3374. sy3:    lea invltxt(pc),a1
  3375.     bsr.w txttobuf
  3376.  
  3377. sy2:    bsr.w rawline
  3378.  
  3379.     st d7
  3380. syq:    rts
  3381.  
  3382. srcsync:moveq #0,d5        ;default trk0
  3383.     subq.b #1,d3        ;vc
  3384.     bmi.b sync11
  3385.     bhi.w syq
  3386.     move.l para-base(a6),d5
  3387.     cmp.l #82*2-1,d5
  3388.     bhi.w syq
  3389. sync11:
  3390.     bsr.w motondt        ;stays selected
  3391.     bsr.w stepup
  3392.     bsr.w stepdwn
  3393.     sf dskerr-base(a6)
  3394.     bsr.w trk0
  3395.     tst.b dskerr-base(a6)
  3396.     bne.w sync7
  3397.     sf wrflag-base(a6)
  3398.     bsr.w testindrive    ;wrflag?
  3399.     bne.w sync7
  3400.  
  3401.     move.l d5,d1
  3402.     bsr.w dotrk
  3403.  
  3404.     move.l dskadr-base(a6),a3
  3405.     moveq #-1,d0
  3406.     move.w readlen-base(a6),d1
  3407.     lsr.w #1,d1
  3408.     bra.b sync2
  3409. sync8:    move.l d0,(a3)+
  3410. sync2:    dbf d1,sync8
  3411.  
  3412.     bsr.w readmfmindex
  3413.  
  3414.     moveq #16-1,d5
  3415. rotloop:
  3416.     move.l dskadr-base(a6),a3
  3417.     move.w readlen-base(a6),d0
  3418.     add.w d0,d0
  3419.     lea (a3,d0.w),a4         ;dmaend
  3420.  
  3421.     lea linebuf-base(a6),a0
  3422.     move.b #"-",(a0)+
  3423.  
  3424. sync1:    cmp.l a4,a3
  3425.     bcc.b sync4
  3426.     cmp.w #$aaaa,(a3)+        ;find $aaaa
  3427.     bne.b sync1
  3428.  
  3429. sync5:    cmp.w #$aaaa,(a3)        ;skip $aaaa
  3430.     bne.w sync3
  3431.     addq.w #2,a3
  3432.     bra.b sync5
  3433.  
  3434. sync3:    move.w (a3)+,d3
  3435.     
  3436.     moveq #%111,d2
  3437.     moveq #7-1,d1
  3438. syncmsk:move.w d3,d0
  3439.     and.w d2,d0
  3440.     beq.b issync1
  3441.     add.w d2,d2
  3442.     add.w d2,d2
  3443.     dbf d1,syncmsk
  3444.     bra.b sync1
  3445.  
  3446. issync1:tst.w d1        ;last mask?
  3447.     beq.b issync
  3448. issync0:add.w d2,d2
  3449.     add.w d2,d2
  3450.     move.w d3,d0        ;more than 1 sync pattern?
  3451.     and.w d2,d0
  3452.     beq.b sync1        ;skip
  3453.     dbf d1,issync0
  3454.  
  3455. issync:    cmp.l a4,a3
  3456.     bhi.b sync4
  3457.  
  3458.     lea linebuf+xchars-6-base(a6),a1
  3459.     cmp.l a1,a0        ;too many 'syncs' = trash
  3460.     bhi.b sync9
  3461.     
  3462.     move.w d3,d0
  3463.     bsr.w wordtoa
  3464.     addq.w #1,a0
  3465.     bra.b sync1
  3466.  
  3467. sync4:    lea linebuf+1-base(a6),a1
  3468.     cmp.l a1,a0
  3469.     beq.b sync6
  3470.     bsr.w rawline
  3471.  
  3472. sync9:    lea linebuf-base(a6),a0
  3473.     move.b #"-",(a0)+
  3474.  
  3475. sync6:    move.l dskadr-base(a6),a3
  3476.     move.w readlen-base(a6),d0
  3477.     move.w -2(a4),d1
  3478.     lsr.w #1,d1
  3479.     bra.w sync0
  3480. rotate:    roxr.w (a3)+
  3481. sync0:    dbf d0,rotate 
  3482.     dbf d5,rotloop
  3483.  
  3484. sync7:    bsr.w motoff
  3485.     bsr.b clrlbuf
  3486.     st d7
  3487.     rts
  3488.  
  3489. clrlbuf:lea linebuf-base(a6),a0
  3490.     moveq #xchars-1,d0
  3491. clrlb0:    move.b #" ",(a0)+
  3492.     dbf d0,clrlb0
  3493.     rts
  3494.  
  3495. megasum:subq.l #1,d3
  3496.     bne.b megaq
  3497.     move.l para-base(a6),d4
  3498.     btst #0,d4
  3499.     bne.b megaq    
  3500.     move.l d4,a0
  3501.     move.l $1a4(a0),d1    ;endaddress
  3502.     cmp.l #$1fffff,d1    ;max 16Mbit
  3503.     bhi.b nomod
  3504.     addq.l #1,d1
  3505.     move.l d1,d0
  3506.     and.w #$1fff,d0        ;min 8kb
  3507.     bne.b nomod
  3508.     sub.l #$200,d1
  3509.     moveq #0,d3
  3510.     lea $200(a0),a1    
  3511. megchk:    add.w (a1)+,d3
  3512.     subq.l #2,d1    
  3513.     bne.b megchk
  3514.     move.w $18e(a0),d2
  3515.     move.w d3,$18e(a0)
  3516.     
  3517.     lea linebuf+1-base(a6),a0
  3518.     lea chktxt1(pc),a1
  3519.     bsr.w txttobuf
  3520.     move.w d2,d0
  3521.     bsr.w wordtoa_
  3522.     lea chktxt2(pc),a1
  3523.     bsr.w txttobuf
  3524.     move.w d3,d0
  3525.     bsr.w wordtoa_
  3526.     bsr.w rawline
  3527. nomgd:    st d7
  3528. megaq:    rts
  3529. nomod:    lea nmgdtxt(pc),a1
  3530.     bsr.w msgout
  3531.     bra.b nomgd
  3532.  
  3533. famiq:    rts    
  3534. famisum:subq.l #1,d3
  3535.     bne.b famiq
  3536.     move.l para-base(a6),d0
  3537.     btst #0,d0
  3538.     bne.b famiq
  3539.     move.l d0,a2
  3540.     cmp.w #$aabb,8(a2)    ;header?
  3541.     bne.b nohead
  3542.     lea $200(a2),a2        ;skip header
  3543. nohead:    lea linebuf+1-base(a6),a0
  3544.     lea nametxt(pc),a1
  3545.     bsr.w txttobuf
  3546.     lea $7fc0(a2),a3
  3547.     moveq #22-1,d0
  3548. famitit:move.b (a3)+,(a0)+
  3549.     dbf d0,famitit
  3550.     addq.w #1,a0
  3551.     move.b (a3)+,d5        ;$7fc0+22=$7fd6
  3552.     moveq #0,d1
  3553.     move.b (a3)+,d1        ;$7fd7 romsize
  3554.     moveq #10,d0
  3555.     add.b d1,d0
  3556.     moveq #0,d4
  3557.     bset d0,d4        ;romlen
  3558.     moveq #0,d0
  3559.     bset d1,d0
  3560.     bsr.w hextod
  3561.     lea mromtxt(pc),a1
  3562.     bsr.w txttobuf
  3563.     move.b (a3)+,d1        ;$7fd8 ramsize
  3564.     subq.b #1,d5        ;type
  3565.     bmi.b faminf1
  3566.     lea mramtxt(pc),a1
  3567.     beq.b faminf2
  3568.     lea backtxt(pc),a1
  3569. faminf2:moveq #0,d0
  3570.     bset d1,d0    
  3571.     bsr.w hextod
  3572.     move.b #"K",(a0)+
  3573.     move.b #"B",(a0)+
  3574.     bsr.w txttobuf
  3575. faminf1:lea manutxt(pc),a1
  3576.     bsr.w txttobuf
  3577.     move.b (a3)+,d0        ;$7fd9
  3578.     lsl.w #8,d0
  3579.     move.b (a3)+,d0        ;$7fda
  3580.     bsr.w wordtoa_
  3581.     bsr.w txttobuf
  3582.     move.b (a3)+,d0        ;$7fdb
  3583.     bsr.w bytetoa_
  3584.     bsr.w rawline
  3585.  
  3586.     move.l (a3),d2        ;$7fdc checksum
  3587.     clr.l (a3)
  3588.     not.w (a3)
  3589.  
  3590.     moveq #0,d0
  3591.     moveq #0,d1
  3592.     move.l a2,a0
  3593. famis1:    add.b (a0)+,d0
  3594.     bcc.b famis0
  3595.     addq.b #1,d1
  3596. famis0:    subq.l #1,d4
  3597.     bne.b famis1
  3598.     lsl.w #8,d0
  3599.     move.b d1,d0
  3600.     move.w d0,d3
  3601.     not.w d3
  3602.     swap d3
  3603.     move.w d0,d3
  3604.     move.l d3,(a3)
  3605.     bra.b sumout
  3606.  
  3607. btsum:    lea bootsub(pc),a2
  3608.     bra.b check
  3609. dtsum:    lea datasub(pc),a2
  3610.     bra.b check
  3611. bisum:    lea bitsub(pc),a2
  3612.     bra.b check
  3613. kisum:    lea kicksub(pc),a2
  3614. check:    subq.l #1,d3        ;lets calc some checksums
  3615.     bne.b chkq
  3616.     move.l para-base(a6),d4
  3617.     btst #0,d4
  3618.     bne.b chkq
  3619.     move.l d4,a0
  3620.     jsr (a2)
  3621.  
  3622. sumout:    lea linebuf+1-base(a6),a0
  3623.     lea chktxt1(pc),a1
  3624.     bsr.w txttobuf
  3625.     move.l d2,d0
  3626.     bsr.w longtoa_
  3627.     lea chktxt2(pc),a1
  3628.     bsr.w txttobuf
  3629.     move.l d3,d0
  3630.     bsr.w longtoa_
  3631. chk2:    bsr.w rawline
  3632.  
  3633.     st d7
  3634. chkq:    rts
  3635.  
  3636. bootsub:bsr.b bootsum        ;d2:old,d3:new
  3637.     move.l d3,4(a0)
  3638.     rts
  3639. datasub:bsr.w datasum
  3640.     move.l d3,20(a0)    ;d2:old,d3:new
  3641.     rts
  3642. bitsub:    move.l (a0),d2        ;old
  3643.     bsr.w bitsum2        ;2!  d1:new
  3644.     move.l d1,d3
  3645.     rts
  3646.  
  3647. kicksub:moveq #-6,d0
  3648.     and.w (a0),d0
  3649.     cmp.w #$1110,d0        ;$1111,$1114
  3650.     bne.b kicks1
  3651.     moveq #4,d3
  3652.     swap d3
  3653.     cmp.l -20(a0,d3.l),d3
  3654.     beq.b kicks0
  3655.     add.l d3,d3
  3656.     cmp.l -20(a0,d3.l),d3
  3657.     beq.b kicks0
  3658. kicks1:    st d7
  3659.     addq.w #4,a7
  3660.     lea nkicktx(pc),a1
  3661.     bra.w msgout
  3662. kicks0:    move.l -24(a0,d3.l),d2
  3663.     moveq #24,d0
  3664.     moveq #0,d5    
  3665. kicks2:    cmp.l d0,d3
  3666.     beq.b kicks3
  3667.     sub.l (a0),d5
  3668.     bcc.b kicks3
  3669.     subq.l #1,d5
  3670. kicks3:    addq.w #4,a0
  3671.     subq.l #4,d3
  3672.     bne.b kicks2
  3673.     move.l d5,d3
  3674.     cmp.l -24(a0),d3    ;not changed
  3675.     beq.b kicks4
  3676.     move.l d3,-24(a0)    ;d2:old,d3:new
  3677. kicks4:    rts
  3678.  
  3679. bootsum:move.l a0,-(a7)
  3680.     move.l (a0)+,d3
  3681.     move.l (a0),d2
  3682.     clr.l (a0)+
  3683.     move.w #$ff-2,d1
  3684. boots0:    add.l (a0)+,d3
  3685.     bcc.b boots1
  3686.     addq.l #1,d3
  3687. boots1:    dbf d1,boots0
  3688.     not.l d3
  3689.     move.l (a7)+,a0
  3690.     rts
  3691.  
  3692. sblk:    st wrcmd-base(a6)    ; we want to load/save tracks
  3693.     bra.b rds6
  3694. lblk:    sf wrcmd-base(a6)
  3695. rds6:    cmp.b #1,d3
  3696.     bls.w rdsq
  3697.     cmp.b #3,d3
  3698.     bhi.w rdsq
  3699.     move.l para-base(a6),d6    ;loadadr
  3700.     btst #0,d6
  3701.     bne.w rdsq
  3702.  
  3703.     move.l para+4-base(a6),d5
  3704.     moveq #1,d4
  3705.     cmp.b #3,d3
  3706.     bne.b rds0
  3707.     move.l para+8-base(a6),d4
  3708. rds0:    move.w cylsec-base(a6),d0    ;22/44
  3709.     cmp.b #"s",(a0)        ;para=sectors?
  3710.     beq.b rds9
  3711.     mulu d0,d4    ;numcyl
  3712.     mulu d0,d5    ;1st cyl
  3713. rds9:    moveq #83,d3
  3714.     mulu d0,d3
  3715.     cmp.l d3,d5
  3716.     bcc.b rdsq
  3717.  
  3718.     add.l d5,d4
  3719.     cmp.l d3,d4
  3720.     bls.b rds1
  3721.     move.l d3,d4
  3722. rds1:
  3723.     bsr.w motondt    ;stays selected
  3724.     bsr.w stepup
  3725.     bsr.w stepdwn
  3726.     sf dskerr-base(a6)
  3727.     bsr.w trk0
  3728.     tst.b dskerr-base(a6)
  3729.     bne.b rds7
  3730.     sf truebuf-base(a6)
  3731.     clr.l secinbuf-base(a6)
  3732.     move.b wrcmd-base(a6),wrflag-base(a6)
  3733.     bsr.w testindrive
  3734.     bne.b rds7
  3735.  
  3736. rds3:    cmp.l d5,d4
  3737.     bls.b rds2
  3738.  
  3739.     tst.b wrcmd-base(a6)
  3740.     bne.b rds4
  3741.     bsr.w getsec    ;d5.l:blk,d6:adr ;del:d0,d1,a1;dskerr
  3742.     bra.b rds5
  3743. rds4:    bsr.w putsec        ;d5.l:blk,d6:adr
  3744.  
  3745. rds5:
  3746.     tst.b dskerr-base(a6)
  3747.     bne.b rds7
  3748.  
  3749.     move.l d6,d0        ;loadadr
  3750.     bsr.b thsinfo
  3751.  
  3752.     lea $200.w,a0
  3753.     add.l a0,d6
  3754.     addq.l #1,d5
  3755.  
  3756.     bsr.w stopit
  3757.     bne.b rds3
  3758.  
  3759. rds2:    bsr.w updatedisk
  3760. rds7:    bsr.w motoff        ;deselect
  3761.     st d7
  3762. rdsq:    rts
  3763.  
  3764. thsinfo:move.l d0,d1
  3765.     lea $200.w,a0
  3766.     add.l a0,d1
  3767.     lea linebuf+1-base(a6),a0
  3768.     bsr.w twolong_
  3769.     bsr.b thsbuf
  3770.     lea blktxt(pc),a1
  3771.     bsr.w txttobuf
  3772.     move.w d5,d0
  3773.     bsr.w wordtoa_
  3774.     move.b #"=",(a0)+
  3775.     bsr.w wordtod
  3776.     bra.w rawline
  3777.  
  3778. thsbuf:    lea trktxt(pc),a1
  3779.     bsr.w txttobuf
  3780.     move.b trk-base(a6),d0
  3781.     lsr.b #1,d0
  3782.     bsr.w bytetod
  3783.     lea hedtxt-base(a6),a1
  3784.     bsr.w txttobuf
  3785.     move.b trk-base(a6),d0
  3786.     and.b #1,d0
  3787.     add.b #"0",d0
  3788.     move.b d0,(a0)+
  3789.     lea sectxt(pc),a1
  3790.     bsr.w txttobuf
  3791.     move.b sec-base(a6),d0
  3792.     bra.w bytetod
  3793.  
  3794. calcts:    move.l d5,d0
  3795.     divu trksec-base(a6),d0    ;11/22
  3796.     move.b d0,d1        ;trk
  3797.     cmp.b trk-base(a6),d1
  3798.     beq.b cal1
  3799.     sf truebuf-base(a6)
  3800. cal1:    swap d0
  3801.     move.b d0,sec-base(a6)
  3802.     rts
  3803.  
  3804. testindrive:
  3805.     btst #2,$bfe001
  3806.     bne.b tid0
  3807.     lea nodisk(pc),a1
  3808. tid2:    lea linebuf-base(a6),a0
  3809.     bsr.w drvnum
  3810.     bsr.w txttobuf
  3811.     bsr.w rawline
  3812.     moveq #-1,d0
  3813.     rts        ;bne.b error
  3814. tid0:    tst.b wrflag-base(a6)
  3815.     beq.b tid1
  3816.     lea wrdisk(pc),a1
  3817.     btst #3,$bfe001
  3818.     beq.b tid2
  3819. tid1:    moveq #0,d0
  3820.     rts        ;bne.b error
  3821.  
  3822. testdosdsk:
  3823.     lea rootblk-base(a6),a0
  3824.     move.l a0,d6
  3825.     moveq #0,d5        ;bootblock
  3826.     bsr.w getsec
  3827.     tst.b dskerr-base(a6)
  3828.     bne.b tdd3
  3829.  
  3830.     move.l rootblk-base(a6),d0
  3831.     move.w #488,d5
  3832.     bclr #0,d0
  3833.     sne ffs-base(a6)    ;FFS
  3834.     beq.b tdd5
  3835.     move.w #512,d5
  3836. tdd5:    bclr #1,d0
  3837.     sne int-base(a6)    ;"DOS",2|"DOS",3
  3838.     cmp.l dosofs-base(a6),d0
  3839.     beq.b tdd0
  3840.  
  3841. nodos:    lea ndostxt(pc),a1
  3842. nodos2:    lea linebuf-base(a6),a0
  3843.     bsr.w drvnum
  3844.     bsr.w txttobuf
  3845.     bsr.w rawline
  3846. tdd3:    moveq #-1,d0        ;bne.b error
  3847.     rts
  3848.  
  3849. tdd0:    move.w d5,datasiz-base(a6)
  3850.     move.l rootkey-base(a6),d5
  3851.     bsr.w getsec
  3852.     tst.b dskerr-base(a6)
  3853.     bne.b tdd3
  3854.     move.b rootblk+$138+3-base(a6),valflag-base(a6)    ;save bitmapflag
  3855.  
  3856.     move.l d6,a0
  3857.     bsr.b datasum        ;d2:old,d3:new
  3858.     cmp.l d3,d2
  3859.     lea chktxt(pc),a1
  3860.     bne nodos2
  3861.     cmp.l lastchk-base(a6),d2
  3862.     beq.b tdd4
  3863.     move.l d2,lastchk-base(a6)
  3864.     move.l rootkey-base(a6),dirkey-base(a6)    ;rootdir on diskchange
  3865. tdd4:    tst.b wrcmd-base(a6)
  3866.     beq.b tdd1
  3867.     tst.l $138(a0)
  3868.     lea dskvtxt(pc),a1
  3869.     beq.b nodos2
  3870. tdd1:    move.l $13c(a0),d5    ;read bitmap blk
  3871.     move.l d5,bitsec-base(a6)
  3872.     lea bitmap-base(a6),a1
  3873.     move.l a1,d6
  3874.     bsr.w getsec     
  3875.     tst.b dskerr-base(a6)
  3876.     bne.b tdd3
  3877.     moveq #0,d0    ;bne.b error
  3878.     rts        
  3879.  
  3880. datasum:move.l a0,-(a7)
  3881.     moveq #512/4-1,d1
  3882.     move.l 20(a0),d2
  3883.     clr.l 20(a0)
  3884.     moveq #0,d3
  3885. datsum0:sub.l (a0)+,d3
  3886.     dbf d1,datsum0
  3887.     move.l (a7)+,a0
  3888.     rts
  3889.     
  3890. putsec:    movem.l d0-d7/a0-a6,-(a7)    ;puts sectors into buffer
  3891.     sf dskerr-base(a6)
  3892.     st wrflag-base(a6)
  3893.  
  3894.     move.l d5,d0        ;blk
  3895.     divu trksec-base(a6),d0    ;11/22
  3896.     cmp.b trk-base(a6),d0    ;do we change tracks?
  3897.     beq.b puts1
  3898.     
  3899.     tst.l secinbuf-base(a6)
  3900.     beq.b puts1        ;nutin' to write
  3901.     bsr.w updatedisk    ;sets dskerr
  3902.     clr.l secinbuf-base(a6)
  3903.  
  3904. puts1:    move.l d6,a0
  3905.     move.l d5,d4
  3906.     divu trksec-base(a6),d4    ;11/22
  3907.     swap d4
  3908.     move.l secinbuf-base(a6),d0
  3909.     bset d4,d0
  3910.     move.l d0,secinbuf-base(a6)
  3911.     move.w #$200,d0
  3912.     mulu d4,d0
  3913.     lea dostrkbuf-base(a6),a1
  3914.     add.l d0,a1
  3915.     moveq #512/4-1,d0
  3916. puts5:    move.l (a0)+,(a1)+
  3917.     dbf d0,puts5
  3918. puts4:    bsr.w calcts        ;d5
  3919.     bsr.w dotrk
  3920.     movem.l (a7)+,d0-d7/a0-a6
  3921.     rts
  3922.  
  3923. updatedisk:movem.l d0-d7/a0-a6,-(a7)
  3924.     st wrflag-base(a6)
  3925.     sf truebuf-base(a6)
  3926.     sf dskerr-base(a6)
  3927.  
  3928.     tst.l secinbuf-base(a6)    ;reads in missing sectors and writes
  3929.     beq.b updat3
  3930.  
  3931.     lea dostrkbuf-base(a6),a1
  3932.     move.l a1,d6
  3933.     moveq #0,d5
  3934.     move.b trk-base(a6),d5
  3935.     mulu trksec-base(a6),d5    ;11/22
  3936.     moveq #0,d4
  3937. updat0:    bsr.w calcts        ;d5.l>d1.b=trk;del:d0
  3938.     bsr.w dotrk        ;del:a1,d1,d0
  3939.     tst.b dskerr-base(a6)    ;removed?
  3940.     bne.b updat3
  3941.     move.l secinbuf-base(a6),d0
  3942.     btst d4,d0
  3943.     bne.b updat2
  3944.  
  3945.     bsr.w readsec        ;d6:adr
  3946.     tst.b dskerr-base(a6)
  3947.     bne.b updat3
  3948.  
  3949. updat2:    addq.l #1,d5
  3950.     lea $200.w,a1
  3951.     add.l a1,d6
  3952.     addq.w #1,d4
  3953.     cmp.w trksec-base(a6),d4    ;11/22
  3954.     bne.b updat0
  3955.  
  3956.     bsr writeit    ;sets dskerr
  3957.     bsr.w stepdel    ;wait >2.0 ms before sel/step/...
  3958. updat3:    movem.l (a7)+,d0-d7/a0-a6
  3959.     rts
  3960.  
  3961. getsec:    tst.l secinbuf-base(a6)    ;get a sector (and write buffer)
  3962.     beq.b gets1
  3963.     bsr.w updatedisk
  3964.     clr.l secinbuf-base(a6)
  3965. gets1:    sf wrflag-base(a6)
  3966.     bsr.w calcts        ;d5.l>d1.b=trk;del:d0
  3967.     bsr.w dotrk        ;del:a1,d1,d0
  3968.     tst.b dskerr-base(a6)
  3969.     beq.b readsec        ;d6:adr
  3970.     rts
  3971.  
  3972. cmpsec:    movem.l d0-d7/a0-a3,-(a7)
  3973.     moveq #1,d5        ;$80000000:1 try
  3974.     ror.l #1,d5
  3975.     bra.b cmps0
  3976.  
  3977. readsec:cmp.b #30,dskerr-base(a6)
  3978.     bne.b iscall
  3979.     movem.l d0-d3/a1,-(a7)
  3980.     move.b trk-base(a6),d3
  3981.     sf dskerr-base(a6)
  3982.     bsr trk0        ;recal
  3983. ;    tst.b dskerr-base(a6)
  3984. ;    bne.b rsnocal        ;keep cyl unchanged
  3985.     move.b d3,d1
  3986.     bsr dotrk
  3987.     movem.l (a7)+,d0-d3/a1
  3988. iscall:    bsr rdsec
  3989.     tst.b dskerr-base(a6)
  3990.     beq.b rdsnerr
  3991.     movem.l d0/a0-a1,-(a7)
  3992.     lea rerrtxt-base(a6),a1
  3993.     lea linebuf+1-base(a6),a0
  3994.     bsr txttobuf
  3995.     move.b dskerr-base(a6),d0
  3996.     bsr.w bytetod
  3997.     move.b #")",(a0)+
  3998.     bsr thsbuf    
  3999.     addq.w #8,a0
  4000.     lea retrytx(pc),a1
  4001.     bsr txttobuf
  4002.     bsr rawline
  4003.     movem.l (a7)+,d0/a0-a1
  4004.  
  4005.     bsr mstest
  4006.     beq.b readsec    ;retry
  4007.     bpl.b rdsnerr    ;abort
  4008. ;    bmi.b rdsigno    ;ignore
  4009. rdsigno:sf dskerr-base(a6)
  4010. rdsnerr:rts
  4011. rdsec:    movem.l d0-d7/a0-a3,-(a7)
  4012.     moveq #retry,d5
  4013. cmps0:    move.l mask55-base(a6),d7
  4014. rsec7:    tst.b truebuf-base(a6)
  4015.     bne.b rsec1
  4016.     bsr.w readmfm        ;del:d0,a2
  4017.     tst.b truebuf-base(a6)
  4018.     beq.w rsec0
  4019. rsec1:    move.l dskadr-base(a6),a2
  4020.     move.w readlen-base(a6),a3
  4021.     add.w a3,a3
  4022.     add.l a2,a3
  4023.     move.w trksecm1-base(a6),d2    ;#10/21
  4024. rsec2:    move.w sync-base(a6),d0
  4025.     cmp.l a3,a2
  4026.     bhi.w rsec8        ;no sync found
  4027.     cmp.w (a2)+,d0
  4028.     bne.b rsec2
  4029.     cmp.w (a2),d0
  4030.     beq.b rsec2
  4031.     bsr.w getlong
  4032.     move.l d0,d1
  4033.     move.l d0,d4        ;save for chksum
  4034.     rol.l #8,d1
  4035.     not.b d1
  4036.     beq.b rsfbok
  4037.     sf truebuf-base(a6)
  4038.     move.b #23,dskerr-base(a6)    ;(BadSecID)
  4039. rsfbok:    rol.l #8,d1
  4040.     cmp.b trk-base(a6),d1
  4041.     beq.b rstrkok
  4042.     sf truebuf-base(a6)
  4043.     move.b #30,dskerr-base(a6)    ;(SeekError)
  4044. rstrkok:
  4045.     lsr.w #8,d0
  4046.             ;cmp.b #10,d0,bhi.b >11 sec
  4047.     cmp.b sec-base(a6),d0
  4048.     beq.b rsec4
  4049.     lea $43c-8(a2),a2    ;skip blk
  4050.     bra.b rsec5
  4051. rsec4:    subq.w #8,a2        ;format,trk,sec,secgap
  4052.     moveq #0,d4
  4053.     moveq #10-1,d3
  4054. rslabel:move.l (a2)+,d0        ;header chk
  4055.     and.l d7,d0
  4056.     eor.l d0,d4
  4057.     dbf d3,rslabel
  4058.     bsr.b getlong
  4059.     cmp.l d0,d4    
  4060.     beq.b rshead
  4061.     sf truebuf-base(a6)
  4062.     move.b #24,dskerr-base(a6) ;(BadHdrSum)
  4063. rshead:    bsr.b getlong        ;data chk
  4064.     move.l d0,-(a7)
  4065.  
  4066.     move.l d6,a0
  4067.     moveq #128-1,d3
  4068.     moveq #0,d4
  4069.     lea 512(a2),a1
  4070.     tst.l d5
  4071.     bpl.b rsec3
  4072.  
  4073.     tst.l (a7)+
  4074. cmps3:    move.l (a1)+,d1
  4075.     eor.l d1,d4
  4076.     and.l d7,d1
  4077.     move.l (a2)+,d0
  4078.     eor.l d0,d4
  4079.     and.l d7,d0
  4080.     add.l d0,d0
  4081.     or.l d1,d0
  4082.     cmp.l (a0)+,d0
  4083.     dbne d3,cmps3
  4084.     beq.b rsec0
  4085.     move.b #20,dskerr-base(a6)    ;verify error (NotSpecified)
  4086.     bra.b rsec6
  4087.  
  4088. rsec3:    move.l (a1)+,d1
  4089.     eor.l d1,d4
  4090.     and.l d7,d1
  4091.     move.l (a2)+,d0
  4092.     eor.l d0,d4
  4093.     and.l d7,d0
  4094.     add.l d0,d0
  4095.     or.l d1,d0
  4096.     move.l d0,(a0)+    
  4097.     dbf d3,rsec3
  4098.     and.l d7,d4
  4099.     cmp.l (a7)+,d4        ;chk
  4100.     beq.b rsec0
  4101.     move.b #25,dskerr-base(a6)    ;data chksum wrong (BadSecSum)
  4102.     bra.b rsec6
  4103. rsec5:    dbf d2,rsec2
  4104. rsec8:    move.b #21,dskerr-base(a6)    ;no sync found (NoSecHdr)
  4105. rsec6:    sf truebuf-base(a6)
  4106.     dbf d5,rsec7
  4107.  
  4108. rsec0:    movem.l (a7)+,d0-d7/a0-a3
  4109.     rts
  4110.  
  4111. getlong:movem.l (a2)+,d0-d1
  4112.     and.l d7,d0        ;convert some gore
  4113.     add.l d0,d0
  4114.     and.l d7,d1
  4115.     or.l d1,d0
  4116.     rts
  4117.  
  4118. codemfm:movem.l d0-d7/a0-a4,-(a7)    ;haha, this builds mfmbuffer
  4119.     move.l dskadr-base(a6),a1
  4120.     move.w #$440,d0
  4121.     mulu trksec-base(a6),d0    ;11/22
  4122.     addq.w #4,d0
  4123.     neg.w d0
  4124.     add.w readlen-base(a6),d0
  4125.     add.w readlen-base(a6),d0
  4126.     lsr.w #2,d0
  4127.     move.l maskaa-base(a6),d1
  4128.     bra.b mfmlp3
  4129. mfmlp2:    move.l d1,(a1)+
  4130. mfmlp3:    dbf d0,mfmlp2
  4131.     clr.b d1        ;startsecnum
  4132.     move.w trksecm1-base(a6),d3    ;10/21
  4133.     move.w trksec-base(a6),d2    ;sec till gap 11/22
  4134. mfmlp1:    move.l maskaa-base(a6),(a1)+
  4135.     move.w sync-base(a6),(a1)+
  4136.     move.w sync-base(a6),(a1)+
  4137. ;    st d7            ;format byte
  4138. ;    lsl.w #8,d7
  4139.     moveq #$ffffffff,d7    ;format byte
  4140.     move.b trk-base(a6),d7    ;track 0-159
  4141.     lsl.l #8,d7
  4142.     move.b d1,d7        ;secnum    
  4143.     lsl.l #8,d7
  4144.     move.b d2,d7        ;sec till gap
  4145.     move.l a1,a2
  4146.     bsr.b makelong
  4147.     move.l d6,(a1)+
  4148.     move.l d7,(a1)+
  4149.     moveq #1,d5
  4150.     bsr.w setclock        ;we DO need clockbits...
  4151.     eor.l d6,d7
  4152.     move.l a1,a2
  4153.     clr.l (a1)+
  4154.     clr.l (a1)+
  4155.     clr.l (a1)+
  4156.     clr.l (a1)+
  4157.     clr.l (a1)+
  4158.     clr.l (a1)+
  4159.     clr.l (a1)+
  4160.     clr.l (a1)+
  4161.     bsr.b makelong
  4162.     move.l d6,(a1)+        ;headerchk
  4163.     move.l d7,(a1)+
  4164.     moveq #5,d5
  4165.     bsr.b setclock
  4166.     move.l a1,a3
  4167.     addq.w #8,a1        ;skip datachk
  4168.     move.l a1,a4
  4169.  
  4170.     lea 512(a1),a2
  4171.     move.l mask55-base(a6),d0
  4172.     moveq #512/4-1,d5
  4173.     moveq #0,d4
  4174. mfmlp0:    move.l (a0)+,d7        ;get data
  4175.     move.l d7,d6
  4176.     and.l d0,d7
  4177.     move.l d7,(a2)+
  4178.     eor.l d7,d4
  4179.     lsr.l #1,d6
  4180.     and.l d0,d6
  4181.     move.l d6,(a1)+
  4182.     eor.l d6,d4        ;build chksum
  4183.     dbf d5,mfmlp0
  4184.     move.l d4,d7
  4185.     bsr.w makelong
  4186.     move.l a3,a2
  4187.     move.l d6,(a3)+        ;write datachk
  4188.     move.l d7,(a3)
  4189.     moveq #1,d5
  4190.     bsr.b setclock
  4191.     move.l a4,a2
  4192.     move.w #512/4,d5
  4193.     bsr.b setclock
  4194.     addq.b #1,d1
  4195.     subq.b #1,d2
  4196.     lea $200(a1),a1
  4197.     dbf d3,mfmlp1
  4198.     move.l maskaa-base(a6),(a1)    ;famous last words
  4199.     movem.l (a7)+,d0-d7/a0-a4
  4200.     rts
  4201. makelong:move.l d7,d6
  4202.     lsr.l #1,d6
  4203.     and.l mask55-base(a6),d6
  4204.     and.l mask55-base(a6),d7
  4205.     rts
  4206. setclock:movem.l d0-d6/a2,-(a7)    ;well this is quite nasty down here
  4207.     add.w d5,d5
  4208.     subq.w #1,d5
  4209.     move.l mask55-base(a6),d6
  4210.     move.b -1(a2),d0
  4211. setclk0:move.l (a2),d4
  4212.     move.l d4,d1
  4213.     move.l d4,d2
  4214.     not.l d1
  4215.     and.l d6,d1
  4216.     add.l d1,d1        ;asl.l #1,d1
  4217.     move.l d1,d3
  4218.     roxr.b #1,d0
  4219.     roxr.l #1,d4        ;you know what I do?
  4220.     eor.l d4,d1
  4221.     and.l d3,d1
  4222.     or.l d1,d2
  4223.     move.l d2,(a2)+
  4224.     move.b d2,d0
  4225.     dbf d5,setclk0
  4226.     movem.l (a7)+,d0-d6/a2
  4227.     rts
  4228.  
  4229. writeit:movem.l d6/a0/a1,-(a7)
  4230. write1:    lea dostrkbuf-base(a6),a0
  4231.     bsr codemfm
  4232.     bsr writemfm
  4233.     tst.b dskerr-base(a6)
  4234.     bne.b write0
  4235.  
  4236.     btst #4,langflg-base(a6)    ;verify?
  4237.     bne.b write0            ;no
  4238.  
  4239.     sf truebuf-base(a6)
  4240.     move.w trksecm1-base(a6),d1
  4241. wmf1:    move.b d1,sec-base(a6)
  4242.     move.w #$200,d6
  4243.     mulu d1,d6
  4244.     lea dostrkbuf-base(a6),a0
  4245.     add.l a0,d6
  4246.     bsr cmpsec
  4247.     tst.b dskerr-base(a6)
  4248.     beq.b write2
  4249.  
  4250.     lea veritxt-base(a6),a1
  4251.     lea linebuf+1-base(a6),a0
  4252.     bsr txttobuf
  4253.     move.b dskerr-base(a6),d0
  4254.     bsr.w bytetod
  4255.     move.b #")",(a0)+
  4256.     bsr thsbuf    
  4257.     addq.w #8,a0
  4258.     lea retrytx(pc),a1
  4259.     bsr txttobuf
  4260.     bsr rawline
  4261.  
  4262.     bsr.b mstest
  4263.     beq.b write1    ;retry
  4264.     bpl.b write0    ;abort
  4265. ;    bmi.b write2    ;ignore
  4266.  
  4267. write2:    sf dskerr-base(a6)
  4268.     dbf d1,wmf1    
  4269. write0:    movem.l (a7)+,d6/a0/a1
  4270.     rts    
  4271.  
  4272. mstest:    st dontbuf-base(a6)
  4273.     clr.w buflen-base(a6)
  4274. mst2:    cmp.b #"r",ascii-base(a6)
  4275.     beq.b mst0            ;beq retry
  4276.     cmp.b #$1b,ascii-base(a6)
  4277.     beq.b mst1
  4278.     cmp.b #"a",ascii-base(a6)
  4279.     beq.b mst1
  4280.     cmp.b #"i",ascii-base(a6)
  4281.     bne.b mst2
  4282.     move.w #8,ccr            ;bmi ignore
  4283.     bra.b mst0    
  4284. mst1:    move.w #0,ccr            ;bne abort
  4285. mst0:    sf dontbuf-base(a6)
  4286.     rts
  4287.  
  4288. writemfm:
  4289.     move.b #29,dskerr-base(a6)
  4290.     lea $dff09e,a2
  4291.     bsr.w dskrdy
  4292.     tst.w d0
  4293.     beq.w rmfm0
  4294.     move.w #$4000,d0
  4295.     move.w #$7fff,(a2)        ;$dff09e
  4296.     move.w #$9100,(a2)        ;$dff09e syncwait off
  4297.     bra.b wmfm
  4298.  
  4299. readmfmindex:
  4300.     move.b #29,dskerr-base(a6)
  4301.     lea $dff09e,a2
  4302.     bsr.w dskrdy            ;timeout
  4303.     tst.w d0
  4304.     beq.w rmfm0
  4305.     clr.w d0
  4306.     move.w #$7fff,(a2)        ;$dff09e
  4307.     move.w #$9100,(a2)        ;$dff09e syncwait off
  4308. dindex:    btst #4,$bfdd00
  4309.     bne.b dindex
  4310.     bra.b wmfm
  4311. readmfm:move.b #29,dskerr-base(a6)
  4312.     lea $dff09e,a2
  4313.     bsr.w dskrdy            ;timeout
  4314.     tst.w d0
  4315.     beq.b rmfm0
  4316.     clr.w d0
  4317.     move.w #$7fff,(a2)        ;$dff09e
  4318.     move.w #$9500,(a2)        ;$dff09e syncwait on
  4319. wmfm:    cmp.b #80,trk-base(a6)
  4320.     bls.b precomp            ;precomp00
  4321.     move.w #$a000,(a2)        ;precomp01
  4322. precomp:bsr.w pushcache
  4323.     move.w #$4000,$24-$9e(a2)    ;$dff024
  4324.     move.w #$8010,$96-$9e(a2)    ;$dff096 disk dma on    
  4325.     move.l dskadr-base(a6),$20-$9e(a2)    ;$dff020
  4326.     move.w sync-base(a6),$7e-$9e(a2)    ;$dff07e
  4327.     move.w #$0002,$9c-$9e(a2)    ;$dff09c
  4328.     or.w readlen-base(a6),d0
  4329.     bset #15,d0
  4330.     move.w d0,$24-$9e(a2)        ;$dff024        
  4331.     move.w d0,$24-$9e(a2)        ;$dff024        
  4332.  
  4333.     move.b #26,dskerr-base(a6)
  4334.     move.w #300,d0            ;timeout 300ms
  4335.     tst.b hddrive-base(a6)
  4336.     beq.b rmfm2
  4337.     add.w d0,d0            ;150rpm drive
  4338. rmfm2:    bsr.b wait1ms
  4339.     subq.w #1,d0
  4340.     beq.b rmfm1
  4341.     btst #1,$1f-$9e(a2)        ;$dff01f
  4342.     beq.b rmfm2
  4343. rmfm1:    move.w #$4000,$24-$9e(a2)    ;$dff024
  4344.     bsr.w invcache
  4345.     tst.w d0            ;timeout error?
  4346.     beq.b rmfm0
  4347.     sf dskerr-base(a6)
  4348.     st truebuf-base(a6)
  4349. rmfm0:    rts
  4350. wait1ms:move.l a1,-(a7)
  4351.     lea $bfdd00,a1
  4352.     move.b #$7f,(a1)        ;$bfdd00 clr int
  4353.     bclr #5,$e00-$d00(a1)        ;$bfde00 count 02
  4354.     bset #3,$e00-$d00(a1)        ;$bfde00 oneshot
  4355.     move.b #time1ms&255,$400-$d00(a1)    ;$bfd400 timerlo
  4356.     move.b #time1ms/256,$500-$d00(a1)    ;$bfd500 timerhi
  4357. w1ms0:    btst #0,(a1)            ;$bfdd00 wait timerint
  4358.     beq.b w1ms0
  4359.     move.l (a7)+,a1
  4360.     rts
  4361.  
  4362. initdosdrive:            ;do some init stuff
  4363.     bsr.w motondt
  4364.     bsr.w stepup
  4365.     bsr.w stepdwn
  4366.     sf dskerr-base(a6)
  4367.     bsr.w trk0
  4368.     tst.b dskerr-base(a6)
  4369.     bne.b inidd0
  4370.     clr.l secinbuf-base(a6)
  4371.     sf truebuf-base(a6)
  4372.     bsr.w testindrive
  4373.     bne.b inidd0
  4374.     bsr.w testdosdsk    ;reads root
  4375.     bne.b inidd0
  4376.     pea rootblk-base(a6)
  4377.     move.l (a7)+,d6
  4378.     move.l dirkey-base(a6),d5
  4379.     bsr.w getsec
  4380.     tst.b dskerr-base(a6)
  4381. inidd0:    rts            ;bne.b error
  4382.  
  4383. cd:    lea 3(a5),a0
  4384.     bsr.w getfilename
  4385.     beq.b cdqq
  4386.     cmp.w #30,d4
  4387.     bhi.b cdqq
  4388.  
  4389.     cmp.b #":",(a2)        ;back to the roots..
  4390.     bne.b cd3
  4391.     move.l rootkey-base(a6),dirkey-base(a6)
  4392.     addq.w #1,a2
  4393.     subq.w #1,d4
  4394.     beq.b cdq
  4395.  
  4396. cd3:    sf wrflag-base(a6)
  4397.     sf wrcmd-base(a6)
  4398.     bsr.b initdosdrive
  4399.     bne.b cdq
  4400.  
  4401.     move.l a2,a0
  4402.     bsr.w fnhash        ;a0:str,d4.w:len>d4.w:rootidx,d5:blk
  4403.     beq.b cd1        ;hash entry zero?
  4404.  
  4405.     bsr.w searchfile    ;d5:1st hash,a2:fname
  4406.                 ;>prevchain,a4:header
  4407.     beq.b cd1
  4408.     move.l $1fc(a4),d0
  4409.     addq.l #3,d0        ;-3:file
  4410.     beq.b cd4
  4411.     addq.l #1,d0        ;-4:linked file
  4412.     beq.b cd4
  4413.     move.l 4(a4),d1        ;ownkey/dirkey
  4414.     subq.l #6,d0        ;2:dir
  4415.     beq.b cd2
  4416.     move.l $1d4(a4),d1    ;hardlink/dirkey
  4417.     subq.l #2,d0
  4418.     beq.b cd2
  4419.     bra.b cdq        ;illegal type
  4420.     
  4421. cd4:    bsr.w disfile
  4422.     bra.b cdq
  4423. cd2:    move.l d1,dirkey-base(a6)
  4424.  
  4425. cdq:    bsr.w motoff
  4426.     st d7
  4427. cdqq:    rts
  4428. cd1:    bsr.w dnotfnd
  4429.     bra.b cdq
  4430.  
  4431. delete:    lea 4(a5),a0
  4432.     bsr.w getfilename
  4433.     move.w d4,para+12-base(a6)
  4434.     beq.w deleteq
  4435.     cmp.w #30,d4
  4436.     bhi.w deleteq
  4437.  
  4438.     st wrflag-base(a6)
  4439.     st wrcmd-base(a6)
  4440.     bsr.w initdosdrive
  4441.     bne.w delete0
  4442.  
  4443.     move.l a2,a0
  4444.     clr.l prevchain-base(a6);default:fh in root
  4445.     bsr.w fnhash        ;a0:str,d4.w:len>d4.w:rootidx,d5:blk
  4446.     beq.b delete1        ;hash entry zero?
  4447.  
  4448.     bsr.w searchfile    ;d5:1st hash,a2:fname
  4449.                 ;>prevchain,a4:header
  4450.     bne.b delete2
  4451.  
  4452. delete1:bsr.w fnotfnd
  4453.     bra.w delete0
  4454.  
  4455. delete2:move.l 4(a4),d0
  4456.     bsr.w freeblk
  4457.     beq.w delbm
  4458.  
  4459.     move.l $1fc(a4),d0
  4460.     subq.l #2,d0        ;2:userdir?
  4461.     beq.b delmain
  4462.     addq.l #5,d0        ;-3:file
  4463.     beq.b delmain
  4464.     subq.l #7,d0        ;4:linked dir
  4465.     beq.b islink
  4466.     addq.l #8,d0        ;-4:linked file
  4467.     bne.w delete0    ;illegal type
  4468. islink:    move.l 4(a4),d4        ;ownkey
  4469.     lea rootblk-base(a6),a5    ;temp buffer
  4470.     move.l $1d4(a4),d5    ;true header
  4471. delink:    move.l a5,d6
  4472.     bsr.w getsec
  4473.     tst.b dskerr-base(a6)
  4474.     bne.w delete0
  4475.     move.l $1d8(a5),d0
  4476.     cmp.l d4,d0
  4477.     bne.b notme
  4478.     move.l $1d8(a4),$1d8(a5)    ;delink header
  4479.     move.l a5,a0
  4480.     bsr.w datasum
  4481.     move.l d3,20(a0)    ;chksum
  4482.     bsr.w putsec
  4483.     tst.b dskerr-base(a6)
  4484.     bne.w delete0
  4485.     bra.w delete8
  4486.     ;move.l $1fc(a4),d0    ;remove header from hashchain
  4487.     ;subq.l #4,d0        ;4:linked dir
  4488.     ;beq.w delete8
  4489.     ;addq.l #8,d0        ;-4:linked file
  4490.     ;bne.b delete0        ;illegal type
  4491.     ;bra.b delfile
  4492. notme:    move.l d0,d5
  4493.     bra.b delink
  4494.  
  4495. delmain:move.l $1d8(a4),d5        ;hardlink
  4496.     beq.b nolnkhd
  4497.     move.l d5,d4            ;new main file/dir
  4498.     lea rootblk-base(a6),a5
  4499.     move.l a5,d6
  4500.     bsr.w getsec
  4501.     tst.b dskerr-base(a6)
  4502.     bne.w delete0
  4503.     lea 8(a4),a0
  4504.     lea 8(a5),a1
  4505.     moveq #($1a4-8)/4-1,d0
  4506. cpyhead:move.l (a0)+,(a1)+
  4507.     dbf d0,cpyhead
  4508.     move.l $1f8(a4),$1f8(a5)    ;fhextension|reserved
  4509.     move.l $1fc(a4),$1fc(a5)    ;type:no linked
  4510.     clr.l $1d4(a5)            ;main hardlink
  4511.     move.l a5,a0
  4512. fixlink:bsr.w datasum
  4513.     move.l d3,20(a0)
  4514.     bsr.w putsec            ;write new main hd
  4515.     tst.b dskerr-base(a6)
  4516.     bne.w delete0
  4517.     move.l $1d8(a5),d5
  4518.     beq.b endlink
  4519.     bsr.w getsec
  4520.     tst.b dskerr-base(a6)
  4521.     bne.w delete0
  4522.     move.l d4,$1d4(a5)    ;main hardlink
  4523.     bra.b fixlink
  4524. endlink:bra.b delete8        ;delink old header
  4525.  
  4526. nolnkhd:move.l $1fc(a4),d0
  4527.     subq.l #2,d0        ;2:userdir?
  4528.     beq.b delete5
  4529.     ;addq.l #5,d0        ;-3:file
  4530.     ;bne.b delet0
  4531. delfile:move.l a4,a5
  4532. delete9:lea $134+4(a5),a3
  4533.     moveq #72,d3        ;max #datablk (FFS)
  4534.     tst.b ffs-base(a6)
  4535.     bne.b delete7
  4536.     move.l 8(a5),d3        ;#datablk in this file (OFS)
  4537. delete7:subq.l #1,d3
  4538.     bmi.b delete6
  4539.     move.l -(a3),d0
  4540.     beq.b delete7        ;empty entry (FFS)
  4541.     bsr.w freeblk
  4542.     beq.w delbm
  4543.     bra.b delete7
  4544.  
  4545. delete6:move.l $1f8(a5),d5    ;extension block?
  4546.     beq.b delete8        ;eof
  4547.     lea rootblk-base(a6),a5
  4548.     move.l a5,d6
  4549.     bsr.w getsec
  4550.     tst.b dskerr-base(a6)
  4551.     bne.b delete0
  4552.     move.l d5,d0
  4553.     bsr.w freeblk
  4554.     beq.b delbm
  4555.     bra.b delete9
  4556.  
  4557. delete5:lea $18(a4),a0        ;dir empty?
  4558.     moveq #72-1,d0
  4559. delete4:tst.l (a0)+
  4560.     bne.b delnmt
  4561.     dbf d0,delete4
  4562.  
  4563. delete8:lea rootblk-base(a6),a0
  4564.     move.l a0,d6
  4565.  
  4566.     lea $1f0(a0),a3
  4567.     move.l prevchain-base(a6),d5        ;filehd in chain or root?
  4568.     bne.b ischain
  4569.     move.l dirkey-base(a6),d5
  4570.     move.l roothash-base(a6),a3
  4571.  
  4572. ischain:bsr.w getsec
  4573.     tst.b dskerr-base(a6)
  4574.     bne.b delete0
  4575.  
  4576.     move.l $1f0(a4),(a3)        ;hashchain/roothash
  4577.  
  4578.     move.l d6,a0
  4579.     bsr.w datasum
  4580.     move.l d3,20(a0)
  4581.     bsr.w putsec
  4582.     tst.b dskerr-base(a6)
  4583.     bne.b delete0
  4584.  
  4585.     bsr.w bitsum    ;>a0:bitmap
  4586.     move.l a0,d6
  4587.     move.l bitsec-base(a6),d5
  4588.     bsr.w putsec
  4589.     tst.b dskerr-base(a6)
  4590.     bne.b delete0
  4591.  
  4592.     bsr.w updatedisk
  4593.  
  4594. delete0:bsr.w motoff
  4595.     st d7
  4596. deleteq:rts
  4597. delnmt:    bsr.w dnotmt
  4598.     bra.b delete0
  4599. delbm:    bsr.w bmaperr
  4600.     bra.b delete0
  4601.  
  4602. makedir:lea 3(a5),a0
  4603.     bsr.w getfilename
  4604.     move.w d4,para+12-base(a6)
  4605.     beq.w mdq
  4606.     cmp.w #30,d4
  4607.     bhi.w mdq
  4608.  
  4609.     st wrflag-base(a6)
  4610.     st wrcmd-base(a6)
  4611.     bsr.w initdosdrive
  4612.     bne.w md0
  4613.  
  4614.     move.l a2,a0
  4615.     bsr.w fnhash        ;a0:str,d4.w:len>d4.w:rootidx,d5:blk
  4616.     beq.b md1        ;hash entry zero?
  4617.  
  4618.     bsr.w searchfile    ;d5:1st hash,a2:fname,
  4619.                 ;>prevchain,a4:header
  4620.     beq.b md1
  4621.     bsr.w dexists
  4622.     bra.w md0
  4623. md1:    bsr.w getfreehead
  4624.     beq.w mdfull
  4625.     move.l d0,d4
  4626.  
  4627.     lea header-base(a6),a4
  4628.     move.l a4,a0
  4629.     moveq #512/4-1,d6
  4630. md2:    clr.l (a0)+
  4631.     dbf d6,md2
  4632. ;;
  4633.     move.l roothash-base(a6),a1
  4634.     clr.l linkkey-base(a6)
  4635.     move.l (a1),d5        ;root entry free?
  4636.     beq.b usdroot
  4637. sortus:    cmp.l d4,d5        ;root entry higher?
  4638.     bhi.b usdroot
  4639.     move.l d5,linkkey-base(a6)
  4640.     lea rootblk-base(a6),a5
  4641.     move.l a5,d6
  4642.     bsr.w getsec
  4643.     tst.b dskerr-base(a6)
  4644.     bne.w md0
  4645.     move.l $1f0(a5),d5    ;hashchain
  4646.     bne.b sortus
  4647. usdroot:move.l d5,$1f0(a4)    ;set hashchain
  4648. ;;
  4649.     bsr.w getclok
  4650.     move.l days-base(a6),$1a4(a4)
  4651.     move.l mins-base(a6),$1a8(a4)
  4652.     move.l ticks-base(a6),$1ac(a4)
  4653.  
  4654.     moveq #2,d6
  4655.     move.l d6,(a4)        ;type
  4656.     move.l (a4),$1fc(a4)    ;type
  4657.     move.l d4,4(a4)        ;ownkey
  4658.     move.l dirkey-base(a6),$1f4(a4)    ;parent key
  4659.     lea $1b1(a4),a0
  4660.     move.w para+12-base(a6),d0
  4661.     subq.w #1,d0
  4662. md3:    move.b (a2)+,(a0)+
  4663.     addq.b #1,$1b0(a4)
  4664.     dbf d0,md3
  4665.     move.l a4,a0
  4666.     bsr.w datasum
  4667.     move.l d3,20(a0)
  4668.     move.l 4(a4),d5
  4669.     move.l a4,d6
  4670.     bsr.w putsec
  4671.     tst.b dskerr-base(a6)
  4672.     bne.b md0
  4673. ;;
  4674.     lea rootblk-base(a6),a2
  4675.     move.l a2,d6            ;rootblk/dirblk
  4676.     lea rootblk+$1f0-base(a6),a2    ;hashchain
  4677.     move.l linkkey-base(a6),d5
  4678.     bne.b sortusr
  4679.     move.l roothash-base(a6),a2
  4680.     move.l dirkey-base(a6),d5
  4681. sortusr:bsr.w getsec
  4682.     tst.b dskerr-base(a6)
  4683.     bne.b md0
  4684.  
  4685.     move.l d4,(a2)            ;insert userdir
  4686.     lea rootblk-base(a6),a0        ;root/userdir chk
  4687.     bsr.w datasum
  4688.     move.l d3,20(a0)
  4689.     bsr.w putsec            ;write root/userdir
  4690.     tst.b dskerr-base(a6)
  4691.     bne.b md0
  4692. ;;
  4693.     bsr.w bitsum        ;>a0:bitmap
  4694.     move.l a0,d6
  4695.     move.l bitsec-base(a6),d5
  4696.     bsr.w putsec
  4697.     tst.b dskerr-base(a6)
  4698.     bne.b md0
  4699.  
  4700.     bsr.w updatedisk
  4701. md0:    bsr.w motoff
  4702.     st d7
  4703. mdq:    rts
  4704. mdfull:    bsr.w dskfull
  4705.     bra.b md0
  4706.  
  4707. info:    sf d7
  4708.     bra.b domap
  4709. map:    st d7            ;bitmap
  4710. domap:    sf wrflag-base(a6)
  4711.     sf wrcmd-base(a6)
  4712.     bsr.w initdosdrive
  4713.     bne.w mapq
  4714.  
  4715.     tst.b d7
  4716.     bne.w domap0
  4717.     lea linebuf+1-base(a6),a0
  4718.     lea maptxt(pc),a1
  4719.     bsr.w txttobuf
  4720.     moveq #"D",d0
  4721.     tst.b hddrive-base(a6)
  4722.     beq.b domap1
  4723.     moveq #"H",d0
  4724. domap1:    move.b d0,-14(a0)
  4725.  
  4726.     tst.b valflag-base(a6)    ;from TestDosDsk
  4727.     beq.b isnval
  4728.     addq.w #2,a1        ;inValid
  4729. isnval:    bsr.w txttobuf
  4730.  
  4731.     move.l bitsec-base(a6),d0
  4732.     bsr.w wordtoa_
  4733.     move.b #"=",(a0)+
  4734.     bsr.w wordtod
  4735.     move.b #")",(a0)+
  4736.     move.b #",",(a0)+
  4737.     bsr.w numfree        ;a0:txtbuf;->d4:free blk
  4738.     
  4739.     addq.w #1,a0
  4740.     lea filesys(pc),a1
  4741.     bsr.w txttobuf
  4742.     tst.b int-base(a6)
  4743.     beq.b isnoint
  4744.     addq.w #4,a1
  4745. isnoint:bsr.w txttobuf
  4746.     moveq #"O",d0
  4747.     tst.b ffs-base(a6)
  4748.     beq.b isoldfs
  4749.     moveq #"F",d0
  4750. isoldfs:move.b d0,-5(a0)    ;xFS
  4751.  
  4752.     bsr maxfile
  4753.     lea dskftxt(pc),a1
  4754.     beq.b dskful0
  4755.     bsr.w hextoa_
  4756.     move.b #"=",(a0)+
  4757.     bsr.w hextod
  4758.     lea bytetxt(pc),a1
  4759. dskful0:bsr txttobuf
  4760.     bsr rawline
  4761.     bra.w mapq
  4762.  
  4763. domap0:    bsr.w clrscr
  4764.     lea linebuf-base(a6),a0
  4765.     sf d2
  4766.     bsr.b maphead
  4767.     st d2
  4768.     pea map0(pc)
  4769. maphead:moveq #80-1,d1
  4770. maphd0:    moveq #79,d0
  4771.     sub.l d1,d0
  4772.     divu #10,d0
  4773.     tst.b d2
  4774.     beq.b maphd1
  4775.     swap d0
  4776. maphd1:    add.b #"0",d0
  4777.     move.b d0,(a0)+
  4778.     dbf d1,maphd0
  4779.     bra.w rawline
  4780. map0:
  4781.     move.l scradr-base(a6),a0
  4782.     lea xchars*8*2(a0),a0
  4783.     move.w cylsecm1-base(a6),d4    ;21/43
  4784. map7:    moveq #80-1,d3
  4785.     move.w cylsecm1-base(a6),d0    ;21/43
  4786.     ext.l d0
  4787.     subq.w #2,d0
  4788.     sub.w d4,d0
  4789.     bpl.b map5
  4790.     moveq #%00101010,d6
  4791.     move.b d6,(a0)+
  4792.     move.b d6,xchars*2-1(a0)
  4793.     add.w d6,d6
  4794.     bra.b map1
  4795. map5:    moveq #%01111110,d6
  4796.     move.b d6,(a0)+
  4797.     move.b d6,xchars*2-1(a0)
  4798.     bsr.b tstfree
  4799.     beq.b map1
  4800.     moveq #%01000010,d6
  4801. map1:    move.b d6,xchars-1(a0)
  4802.  
  4803. map6:    add.w cylsec-base(a6),d0    ;22/44
  4804.     dbf d3,map5
  4805.  
  4806.     lea xchars*3(a0),a0
  4807.     cmp.w trksec-base(a6),d4    ;11/22
  4808.     bne.w map8
  4809.     lea xchars(a0),a0
  4810. map8:    dbf d4,map7
  4811.     move.w trksec-base(a6),d0
  4812.     add.b d0,row-base(a6)
  4813.  
  4814. mapq:    bsr.w motoff
  4815.     st d7
  4816.     rts
  4817. tstfree:move.l a0,-(a7)
  4818.     lea bitmap-base(a6),a0
  4819.     move.l d0,d1
  4820.     lsr.w #5,d1
  4821.     add.w d1,d1            ;lsl.w #2,d1
  4822.     add.w d1,d1
  4823.     move.l 4(a0,d1.w),d2
  4824.     btst d0,d2
  4825.     move.l (a7)+,a0
  4826.     rts
  4827.  
  4828. maxfile:movem.l d1/d4,-(a7)
  4829.     moveq #0,d0        ;d4:free blocks;->d0:free bytes
  4830. maxfil2:subq.l #1,d4
  4831.     bmi.b maxfil1
  4832.     beq.b maxfil1
  4833.     moveq #72-1,d1
  4834. maxfil0:addq.w #1,d0
  4835.     subq.l #1,d4
  4836.     beq.b maxfil1
  4837.     dbf d1,maxfil0
  4838.     bra.b maxfil2
  4839. maxfil1:movem.l (a7)+,d1/d4
  4840.     mulu datasiz-base(a6),d0    ;beq.b diskfull
  4841.     rts
  4842.  
  4843. catalog:move.l a5,a0
  4844.     move #xchars-1,d0
  4845. fndfopt:cmp.b #"f",(a0)+
  4846.     dbeq d0,fndfopt
  4847.     move.b d0,catopt-base(a6)    ;bmi.b noopt
  4848.  
  4849.     clr.l lastcmd-base(a6)
  4850.     sf wrflag-base(a6)
  4851.     sf wrcmd-base(a6)
  4852.     bsr.w initdosdrive
  4853.     bne.w catq
  4854.  
  4855.     lea rootblk-base(a6),a3
  4856.     lea linebuf+2-base(a6),a0
  4857.     lea voltxt(pc),a1
  4858.     bsr.w txttobuf
  4859.     lea $1b0(a3),a1
  4860.     bsr.w bcpltobuf
  4861.     move.b #34,(a0)
  4862.  
  4863.     lea linebuf+41-base(a6),a0
  4864.     bsr.w numfree
  4865.  
  4866.     lea header-base(a6),a4
  4867.     lea 24(a3),a2
  4868.     moveq #72-1,d2
  4869. cat0:    move.l (a2)+,d5
  4870.     beq.w cat1
  4871. cat2:    move.l a4,d6
  4872.     bsr.w getsec
  4873.     tst.b dskerr-base(a6)
  4874.     bne.w catq
  4875.  
  4876.     move.b #">",(a0)+
  4877.     addq.w #4,a0
  4878.     
  4879.     move.b #34,(a0)+
  4880.     lea $1b0(a4),a1
  4881.     bsr.w bcpltobuf        ;file/dirname
  4882.     move.b #34,(a0)+
  4883.  
  4884.     lea linebuf+38-base(a6),a0
  4885.     move.l $1fc(a4),d3    ;type
  4886.     subq.l #2,d3        ;+2:dir
  4887.     beq.b notlink
  4888.     addq.l #5,d3        ;-3:fileheader
  4889.     beq.b notlink
  4890.     subq.l #7,d3        ;+4:linked dir
  4891.     lea dlnktxt(pc),a1
  4892.     beq.b filelnk
  4893.     addq.l #8,d3        ;-4:linked fileheader
  4894.     lea flnktxt(pc),a1
  4895.     bne.w catq        ;illegal type
  4896. filelnk:bsr.w txttobuf
  4897.     lea bitmap-base(a6),a1
  4898.     move.l a1,d6        ;buffer for linksec
  4899.     move.l $1d4(a4),d5    ;hardlink
  4900.     bsr.w getsec
  4901.     tst.b dskerr-base(a6)
  4902.     bne.w catq
  4903.     lea bitmap+$1b0-base(a6),a1
  4904.     bsr.w bcpltobuf        ;file/dirname
  4905.     move.b #34,(a0)
  4906.     move.b bitmap+$143-base(a6),$143(a4)    ;copy protection flags
  4907.     bra.w cat3
  4908.  
  4909. notlink:lea $148(a4),a1        ;filecomment
  4910.     bsr.w bcpltobuf
  4911.     lea linebuf+38-base(a6),a0
  4912.     cmp.b #"$",(a0)
  4913.     bne.b nocomm
  4914.     moveq #" ",d0        ;strip "$xx-$" if saved with bm
  4915.     move.b d0,(a0)
  4916.     move.b d0,9(a0)
  4917.     move.b d0,10(a0)
  4918. nocomm:
  4919.     lea linebuf+60-base(a6),a0
  4920.     move.l $1fc(a4),d3
  4921.     moveq #-3,d0
  4922.     cmp.l d0,d3        ;file
  4923.     bne.b cat4
  4924.     move.l $144(a4),d0    ;filesize, use only 24 bit
  4925.     bsr.w adrtoa_
  4926.     addq.w #1,a0
  4927.     bsr.w hextod
  4928.     lea linebuf+75-base(a6),a0
  4929.     tst.l d0
  4930.     beq.b catempt
  4931.     subq.l #1,d0
  4932.     divu datasiz-base(a6),d0
  4933.     move.w d0,d3
  4934.     ext.l d3
  4935.     beq.b catnols        ;filled datablk?
  4936.     divu #72,d3        ;datablk/fileheader/list
  4937.     add.w d3,d0
  4938. catnols:addq.w #1,d0        ;rest of datablk
  4939. catempt:addq.w #1,d0        ;fileheader
  4940.     ext.l d0
  4941.     bsr.w hextod
  4942. cat4:    moveq #2,d0
  4943.     cmp.l d0,d3        ;dir
  4944.     bne.b cat3
  4945.     lea dirtxt(pc),a1
  4946.     bsr.w txttobuf
  4947.  
  4948. cat3:    bsr.w rawline
  4949.  
  4950.     tst.b catopt-base(a6)
  4951.     bmi.w nocatop
  4952.  
  4953.     lea linebuf+1-base(a6),a0
  4954.     move.l $1a4(a4),d0
  4955.     bsr.w todate
  4956.     lea linebuf+25-base(a6),a0
  4957.     move.l $1a8(a4),d0
  4958.     divu #60,d0
  4959.     bsr.w bytetod
  4960.     swap d0
  4961.     move.b #":",(a0)+
  4962.     bsr.w bytetod
  4963.     move.l $1ac(a4),d0
  4964.     divu #50,d0
  4965.     move.b #":",(a0)+
  4966.     bsr.w bytetod
  4967.  
  4968.     lea linebuf+34-base(a6),a0
  4969.     move.b $143(a4),d0
  4970.     eor.b #%1111,d0        ;hspa:1=set,rwed:0=set
  4971.     move.l #"hspa",d3
  4972.     bsr.w protcnv
  4973.     move.l #"rwed",d3
  4974.     bsr.w protcnv
  4975.     lea linebuf+43-base(a6),a0
  4976.     move.l 4(a4),d0        ;fileheader/userdir
  4977.     bsr.w longtoa_
  4978.     addq.w #1,a0
  4979.     move.l $1f8(a4),d0    ;fileheaderextension
  4980.     beq.b nofhext
  4981.     bsr.w longtoa_
  4982. nofhext:move.l $10(a4),d0    ;first data
  4983.     beq.b noentry
  4984.     lea linebuf+63-base(a6),a0
  4985.     bsr.w longtoa_
  4986. noentry:bsr.w rawline
  4987.  
  4988. nocatop:bsr.w stopit
  4989.     beq.b cat5
  4990.     
  4991.     move.l $1f0(a4),d5    ;follow hashchain
  4992.     bne.w cat2
  4993. cat1:    dbf d2,cat0
  4994. cat5:
  4995. catq:    bsr.w motoff
  4996.     st d7
  4997.     rts
  4998.  
  4999. cntfree:lea bitmap+4-base(a6),a1    ;how many free blk?
  5000.     moveq #0,d0
  5001.     move.l lastkey-base(a6),d2
  5002.     subq.l #2,d2        ;reserved
  5003. cat8:    move.l (a1)+,d3
  5004.     moveq #0,d1
  5005. cat6:    btst d1,d3
  5006.     bne.b cat7
  5007.     addq.l #1,d0
  5008. cat7:    subq.l #1,d2
  5009.     bmi.b cnt0
  5010.     addq.w #1,d1
  5011.     cmp.b #32,d1
  5012.     bne.b cat6
  5013.     bra.b cat8
  5014. cnt0:    move.l lastkey-base(a6),d4        ;bootblocks:reserved
  5015.     sub.l #1,d4
  5016.     sub.l d0,d4        ;beq.b nofree
  5017.     rts
  5018. numfree:bsr.b cntfree
  5019.     addq.w #2,a0
  5020.     bsr.w hextod
  5021.     lea usdtxt(pc),a1
  5022.     bsr.w txttobuf
  5023.     move.l d4,d0
  5024.     bsr.w hextod
  5025.     lea fretxt(pc),a1
  5026.     bsr.w txttobuf
  5027.     bra.w rawline
  5028.  
  5029. protcnv:moveq #4-1,d1
  5030. prot:    rol.l #8,d3
  5031.     add.b d0,d0
  5032.     bcs.b protst1
  5033.     move.b #"-",d3
  5034. protst1:move.b d3,(a0)+
  5035.     dbf d1,prot
  5036.     rts
  5037.  
  5038. getclok:movem.l d0-d3/a0-a1,-(a7)
  5039.     clr.l days-base(a6)
  5040.     clr.l mins-base(a6)
  5041.     clr.l ticks-base(a6)
  5042.     lea $dc0000,a0        ;baseadr
  5043.     moveq #15,d1
  5044.     move.b $3f(a0),d0
  5045.     and.b d1,d0
  5046.     subq.b #4,d0
  5047.     beq.b clkold1
  5048.     clr.b $3f(a0)
  5049.     clr.b $3b(a0)
  5050.     move.b #9,$37(a0)    ;new chip off
  5051.     move.b #5,$33(a0)    
  5052.     move.b $33(a0),d0
  5053.     and.b d1,d0
  5054.     bne.b ncorbad
  5055.     move.b $37(a0),d0
  5056.     and.b d1,d0
  5057.     cmp.b #9,d0
  5058.     bne.b ncorbad
  5059.     move.b $2b(a0),d0
  5060.     btst #0,d0
  5061.     beq.b ncorbad
  5062.     sf $37(a0)        ;new chip on
  5063.     moveq #4,d0        ;skip one longword
  5064.     lea $34(a0),a0        ;$dc0034
  5065.     bsr.b clkget        ;returns a0:$dc0000!
  5066.     move.b #9,$37(a0)    ;new chip off
  5067.     bra.b exitclk
  5068. clkold1:moveq #1,d0
  5069.     move.w #$190,d1
  5070. clkbusy:move.b d0,$37(a0)    ;hold
  5071.     btst d0,$37(a0)
  5072.     beq.b bsyout
  5073.     sf $37(a0)
  5074.     dbf d1,clkbusy
  5075.     bra.b ncorbad
  5076. bsyout:    moveq #0,d0        ;don't skip anything
  5077.     lea $30(a0),a0        ;$dc0030
  5078.     bsr.b clkget        ;returns a0:$dc0000!
  5079.     sf $37(a0)
  5080. ncorbad:
  5081. exitclk:movem.l (a7)+,d0-d3/a0-a1
  5082.     rts
  5083. clkget:    bsr.b getclk
  5084.     sub.w #78,d2        ;year<1978?
  5085.     bcc.w clkget0
  5086.     add.w #100,d2        ;eoc
  5087. clkget0:move.l d2,d3
  5088.     mulu #365,d3
  5089.     addq.l #1,d2        ;leap
  5090.     divu #4,d2
  5091.     add.w d2,d3
  5092.     swap d2
  5093.     move.b #28,month+1-base(a6)    ;feb
  5094.     cmp.b #3,d2
  5095.     bne.b noleap
  5096.     addq.b #1,month+1-base(a6)
  5097. noleap:    lea month-base(a6),a1
  5098.     bsr.b getclk
  5099. nextmon:subq.b #1,d2        ;timeout
  5100.     beq.b jan
  5101.     move.b (a1)+,d1
  5102.     add.w d1,d3
  5103.     bra.w nextmon
  5104. jan:    bsr.b getclk
  5105.     subq.l #1,d2
  5106.     add.w d2,d3        ;d3=days
  5107.     move.l d3,days-base(a6)
  5108.     sub.w d0,a0        ;A500/2000:0,A3000/4000:4
  5109.     bsr.b getclk
  5110.     divu #40,d2        ;skip am/pm
  5111.     clr.w d2
  5112.     swap d2
  5113.     move.l d2,d3        ;d3=hours
  5114.     lsl.l #4,d3        ;*60
  5115.     sub.l d2,d3
  5116.     lsl.l #2,d3
  5117.     bsr.b getclk
  5118.     add.l d2,d3        ;d3=mins
  5119.     move.l d3,mins-base(a6)
  5120.     bsr.b getclk
  5121.     mulu #50,d2        ;d3=secs
  5122.     move.l d2,ticks-base(a6)
  5123.     rts
  5124. getclk:    moveq #15,d1
  5125.     and.l -(a0),d1
  5126.     moveq #15,d2
  5127.     and.l -(a0),d2
  5128.     add.l d1,d2
  5129.     add.l d1,d2
  5130.     lsl.l #3,d1
  5131.     add.l d1,d2
  5132.     rts
  5133. dayname:dc.b "Sunday"!$80
  5134.     dc.b "Monday"!$80
  5135.     dc.b "Tuesday"!$80
  5136.     dc.b "Wednesday"!$80
  5137.     dc.b "Thursday"!$80
  5138.     dc.b "Friday"!$80
  5139.     dc.b "Saturday"!$80
  5140.     even
  5141. todate:    movem.l d0-d4,-(a7)    ;funky code, not easy...
  5142.     move.l d0,d4
  5143.     lea 28431.w,a1        ;d0:days since 1.1.78
  5144.     add.l a1,d0
  5145.     lsl.l #2,d0
  5146.     move.l d0,d2
  5147.     subq.l #1,d2
  5148.     divu #1461,d2
  5149.     and.l #$0000ffff,d2
  5150.     addq.l #3,d0
  5151.     move.l d2,d3
  5152.     mulu #1461,d3
  5153.     sub.l d3,d0
  5154.     lsr.l #2,d0
  5155.     move.l d0,d3
  5156.     lsl.l #2,d0
  5157.     add.l d3,d0        ;5*days
  5158.     move.l d0,d1
  5159.     subq.l #3,d1
  5160.     divu #153,d1
  5161.     and.l #$0000ffff,d1
  5162.     addq.l #2,d0
  5163.     move.l d1,d3
  5164.     mulu #153,d3
  5165.     sub.l d3,d0
  5166.     divu #5,d0
  5167.     and.l #$0000ffff,d0
  5168.     moveq #10,d3
  5169.     cmp.l d3,d1
  5170.     bge.b date1
  5171.     addq.l #3,d1        ;month+3
  5172.     bra.b date2
  5173. date1:    subq.l #8,d1
  5174.     subq.l #1,d1        ;month-9
  5175.     addq.l #1,d2        ;year+1
  5176. date2:    bsr.w bytetod
  5177.     lea months(pc),a1
  5178.     move.w d1,d0
  5179.     add.w d0,d0
  5180.     add.w d1,d0
  5181.     lea -3(a1,d0.w),a1
  5182.     move.b #"-",(a0)+
  5183.     move.b (a1)+,(a0)+    ;the month
  5184.     move.b (a1)+,(a0)+
  5185.     move.b (a1)+,(a0)+
  5186.     move.b #"-",(a0)+
  5187.     move.l d2,d0
  5188.     add.w #1900,d0
  5189.     bsr.w wordtod
  5190.     addq.w #1,a0
  5191.     move.b #"[",(a0)+
  5192.     divu #7,d4
  5193.     swap d4
  5194.     move.w d4,d0
  5195.     lea dayname(pc),a1
  5196.     cmp.b #6,d0
  5197.     bsr.w indextx
  5198.     move.b #"]",(a0)+
  5199.     movem.l (a7)+,d0-d4
  5200.     rts
  5201.  
  5202. drive:    cmp.b #1,d3
  5203.     bhi.w drvq
  5204.     tst.b d3
  5205.     beq.b drv0
  5206.     move.l para-base(a6),d0
  5207. drv1:    moveq #3,d1
  5208.     cmp.l d1,d0
  5209.     bhi.w drvq
  5210.     addq.b #3,d0
  5211.     move.b d0,drvbit-base(a6)
  5212. drv0:    bsr.b drvinit
  5213.  
  5214. ;    bsr.w moton
  5215. ;    bsr.w stepup
  5216. ;    bsr.w trk0
  5217. ;    tst.b dskerr-base(a6)
  5218. ;    bne.b error
  5219. ;    bsr.w motoff
  5220.     st d7
  5221. drvq:    rts
  5222.  
  5223. drvi:    move.b d0,drvbit-base(a6)
  5224. drvinit:lea linebuf-base(a6),a0
  5225.     bsr.w drvnumx
  5226.     bsr.b drvtype    ;>d4:drivetype
  5227.     lea logtxt(pc),a1
  5228.     not.l d4
  5229.     bne.b con2
  5230.     cmp.b #3,d1        ;df0:
  5231.     seq d4
  5232.     beq.b con2
  5233.     lea mnttxt(pc),a1    ;no drive
  5234. con2:    bsr.w txttobuf
  5235.     bsr.w rawline
  5236.     tst.l d4
  5237.     bne.b drv2        ;drive is present
  5238.     moveq #3,d0
  5239.     cmp.b drvbit-base(a6),d0
  5240.     bne.b drvi
  5241. drv2:    clr.l secinbuf-base(a6)
  5242.     move.l rootkey-base(a6),dirkey-base(a6)
  5243.     sf truebuf-base(a6)
  5244.     rts
  5245.  
  5246. drvtype:lea $bfd100,a1
  5247.     st (a1)
  5248.     move.b drvbit-base(a6),d1
  5249.     moveq #7,d3
  5250.     bclr d3,(a1)
  5251.     bsr.b relax
  5252.     bclr d1,(a1)
  5253.     bsr.b relax
  5254.     bset d1,(a1)
  5255.     bsr.b relax
  5256.     bset d3,(a1)
  5257.     bsr.b relax
  5258.     bclr d1,(a1)
  5259.     bsr.b relax
  5260.     bset d1,(a1)
  5261.  
  5262.     moveq #31,d3
  5263. con0:    bclr d1,(a1)
  5264.     bsr.b relax
  5265.     move.b $0f01(a1),d2    ;$bfe001
  5266.     lsl.b #3,d2
  5267.     roxl.l #1,d4        ;get the drive msg
  5268.     bset d1,(a1)
  5269.     dbf d3,con0        ;d4:$ffffffff:not mounted
  5270.     move.w #ddmfmwords,readlen-base(a6)
  5271.     moveq #11,d3        ;dd sectors
  5272.     cmp.l #$aaaaaaaa,d4
  5273.     seq hddrive-base(a6)
  5274.     bne.b ddroot
  5275.     move.w #hdmfmwords,readlen-base(a6)
  5276.     add.l d3,d3        ;hd sectors 
  5277. ddroot:    move.w d3,trksec-base(a6)    ;11/22
  5278.     subq.w #1,d3
  5279.     move.w d3,trksecm1-base(a6)
  5280.     addq.w #1,d3
  5281.     add.l d3,d3
  5282.     move.w d3,cylsec-base(a6)    ;22/44
  5283.     subq.w #1,d3
  5284.     move.w d3,cylsecm1-base(a6)
  5285.     addq.w #1,d3
  5286.     mulu #40,d3
  5287.     move.l d3,rootkey-base(a6)    ;880/1760
  5288.     add.l d3,d3
  5289.     subq.l #1,d3
  5290.     move.l d3,lastkey-base(a6)    ;1759/3519
  5291.     subq.l #1,d3
  5292.     move.l d3,lastkeym1-base(a6)    ;1758/3518
  5293.     rts
  5294.  
  5295. relax:    nop
  5296.     nop
  5297.     rts
  5298.  
  5299. motondt:movem.l d1-d4,-(a7)
  5300.     bsr.w drvtype
  5301.     
  5302.     lea $bfd100,a1
  5303.     bclr #7,(a1)
  5304.     bset #0,(a1)    ;nostep
  5305. sel:    move.b drvbit-base(a6),d0
  5306.     bclr d0,(a1)
  5307.  
  5308.     movem.l (a7)+,d1-d4
  5309.     rts
  5310.  
  5311. motoff:    lea $bfd100,a1
  5312.     bset #7,(a1)
  5313.     bsr.b relax
  5314.     or.b #%01111000,(a1)
  5315.     bsr.b relax
  5316.     and.b #%10000111,(a1)
  5317.     bsr.b relax
  5318.     or.b #%01111000,(a1)
  5319.     rts
  5320.  
  5321. dskrdy:    move.w #1500,d0        ;timeout 1.5 sec
  5322. drdynms:bsr.w wait1ms
  5323.     subq.w #1,d0
  5324.     beq.b mot2
  5325.     btst #5,$bfe001
  5326.     bne.b drdynms
  5327. mot2:    rts
  5328.  
  5329. trk0:    movem.l d0-d1/a0-a1,-(a7)
  5330.     bsr.b dskrdy
  5331.     moveq #81+20,d0        ;maxcyl
  5332.     moveq #0,d1
  5333.     lea $bfd100,a1
  5334. trk2:    btst #4,$0f01(a1)    ;$bfe001
  5335.     beq.b trk1
  5336.     addq.w #1,d1
  5337.     bsr.b stepdwn
  5338.     dbf d0,trk2
  5339.     lea trk0txt(pc),a1
  5340.     bsr msgout
  5341.     move.b #30,dskerr-base(a6)    ;(SeekError)
  5342. trk1:    lea drivcyl-3-base(a6),a1
  5343.     move.b drvbit-base(a6),d0
  5344.     ext.w d0
  5345.     add.w d0,a1
  5346.     tst.b (a1)
  5347.     bpl.b trk3    ;startcyl valid
  5348.     move.b d1,(a1)
  5349. trk3:    sf trk-base(a6)
  5350.     movem.l (a7)+,d0-d1/a0-a1
  5351.     rts
  5352.     
  5353. stepup:    bclr #1,(a1)
  5354.     addq.b #2,trk-base(a6)
  5355.     bra.b dostep
  5356. stepdwn:bset #1,(a1)        ;down
  5357.     subq.b #2,trk-base(a6)
  5358. dostep:    sf truebuf-base(a6)
  5359.     bclr #0,(a1)
  5360.     bsr.w relax
  5361.     bset #0,(a1)
  5362. stepdel:movem.l a1/d2,-(a7)
  5363.     move.w #stepcount,d2
  5364.     bra.b stp1
  5365. setldel:movem.l a1/d2,-(a7)
  5366.     move.w #settlecount,d2
  5367. stp1:    lea $bfdd00,a1
  5368.     move.b #$7f,(a1)        ;$bfdd00 clr int
  5369.     bclr #5,$e00-$d00(a1)        ;$bfde00 count 02
  5370.     bset #3,$e00-$d00(a1)        ;$bfde00 oneshot
  5371.     move.b d2,$400-$d00(a1)        ;$bfd400 timerlo
  5372.     lsr.w #8,d2
  5373.     move.b d2,$500-$d00(a1)        ;$bfd500 timerhi
  5374. stp0:    btst #0,(a1)            ;$bfdd00 wait timerint
  5375.     beq.b stp0
  5376.     movem.l (a7)+,a1/d2
  5377.     rts
  5378.  
  5379. dotrk:    lea $bfd100,a1    
  5380.     moveq #0,d0
  5381.     btst d0,d1
  5382.     beq.b dtrk6
  5383.     bclr #2,(a1)
  5384.     bset d0,trk-base(a6)
  5385.     bra.b dtrk0
  5386. dtrk6:    bset #2,(a1)
  5387.     bclr d0,trk-base(a6)
  5388. dtrk0:    lsr.b #1,d1
  5389.     cmp.b #82,d1
  5390.     bls.b dtrk2
  5391.     move.b #82,d1
  5392. dtrk2:    moveq #-1,d0
  5393. dtrk1:    move.b trk-base(a6),d0
  5394.     lsr.b #1,d0
  5395.     cmp.b d0,d1
  5396.     beq.b dtrk3
  5397.     bhi.b dtrk5
  5398.     bsr.w stepdwn
  5399.     bra.b dtrk7
  5400. dtrk5:    bsr.w stepup
  5401. dtrk7:    moveq #0,d0
  5402.     bra.b dtrk1
  5403.  
  5404. dtrk3:    tst.w d0        ;moved head?
  5405.     bpl.b dtrk8
  5406.     bsr.w stepdel
  5407.     bra.b dtrk9
  5408. dtrk8:    bsr.w setldel
  5409. dtrk9:    btst #2,$0f01(a1)    ;$bfe001,disk removed ?
  5410.     bne.b dtrk4
  5411.     move.b #29,dskerr-base(a6)    ;(DiskChanged)
  5412. dtrk4:    rts
  5413.  
  5414. drvnumx:moveq #8,d1
  5415.     bra.b drvnum0
  5416. drvnum:    moveq #0,d1
  5417. drvnum0:move.l a1,-(a7)
  5418.     lea drvtxt(pc),a1
  5419.     add.l d1,a1
  5420.     bsr.w txttobuf
  5421.     moveq #"0"-3,d0
  5422.     add.b drvbit-base(a6),d0
  5423.     move.b d0,-6(a0)
  5424.     move.l (a7)+,a1
  5425.     rts
  5426.  
  5427. format:    lea 7(a5),a0
  5428.     bsr.w getfilename
  5429.     beq.w frmq    ;empty
  5430.     cmp.w #30,d4    ;len
  5431.     bhi.w frmq
  5432.  
  5433.     sf d6
  5434.     bsr.w skipspc    ;no eol check! 
  5435.     cmp.b #"q",(a0)
  5436.     bne.b notkwik
  5437.     st d6
  5438.     addq.w #1,a0
  5439.     bsr.w skipspc    ;no eol check! 
  5440. notkwik:move.l dosofs-base(a6),d5
  5441.     moveq #-"0",d0
  5442.     add.b (a0),d0        ;0:ofs,1:ffs,2:iofs,3:iffs
  5443.     cmp.b #3,d0
  5444.     bhi.b notffs
  5445.     move.b d0,d5
  5446. notffs:    move.l d5,formdos-base(a6)
  5447.     lea rootblk-base(a6),a0
  5448.     clr.l $1b0(a0)
  5449.     lea $1b1(a0),a1        ;copy bcplname
  5450.     subq.w #1,d4        ;d4:len
  5451. fmnam:    move.b (a2)+,(a1)+    ;a2:name
  5452.     addq.b #1,$1b0(a0)
  5453.     dbf d4,fmnam
  5454.  
  5455.     bsr.w motondt        ;stays selected
  5456.     bsr.w stepup
  5457.     bsr.w stepdwn
  5458.     sf dskerr-base(a6)
  5459.     bsr.w trk0
  5460.     tst.b dskerr-base(a6)
  5461.     bne.w frm7
  5462.     st wrflag-base(a6)
  5463.     bsr.w testindrive    ;wrflag?
  5464.     bne.w frm7
  5465.  
  5466.     lea dostrkbuf-base(a6),a0
  5467.     move.w #512/4*11*2-1,d0    ;hd size
  5468.     moveq #0,d1
  5469. clrtrkb:move.l d1,(a0)+
  5470.     dbf d0,clrtrkb
  5471.  
  5472.     moveq #80,d5
  5473.     tst.b d6
  5474.     bne.b frm0        ;quick!
  5475.     move.w #159,d5
  5476. frm0:    move.w d5,d1
  5477.     bsr.w dotrk
  5478.     tst.b dskerr-base(a6)
  5479.     lea fabotxt(pc),a1
  5480.     bne.w frm8        ;disk removed
  5481.  
  5482.     lea dostrkbuf-base(a6),a0
  5483.     tst.w d5
  5484.     bne.b nocyl00
  5485.     move.l formdos-base(a6),(a0)
  5486. nocyl00:cmp.w #80,d5
  5487.     bne.w nocyl40
  5488.  
  5489.     moveq #2,d0        ;type
  5490.     move.l d0,(a0)
  5491.     moveq #$48,d0        ;hashtabsize
  5492.     move.l d0,$0c(a0)
  5493.     moveq #-1,d0        ;valid bm
  5494.     move.l d0,$138(a0)
  5495.     move.l rootkey-base(a6),d0
  5496.     addq.l #1,d0
  5497.     move.l d0,$13c(a0)    ;bm block
  5498.  
  5499.     bsr.w getclok
  5500.     move.l days-base(a6),$1a4(a0)    ;change
  5501.     move.l mins-base(a6),$1a8(a0)
  5502.     move.l ticks-base(a6),$1ac(a0)
  5503.     move.l days-base(a6),$1e4(a0)    ;create
  5504.     move.l mins-base(a6),$1e8(a0)
  5505.     move.l ticks-base(a6),$1ec(a0)
  5506.  
  5507.     move.l a0,-(a7)
  5508.     lea rootblk+$1b0-base(a6),a1
  5509.     lea $1b0(a0),a0
  5510.     move.b (a1),(a0)+
  5511.     bsr.w bcpltobuf
  5512.     move.l (a7)+,a0
  5513.  
  5514.     moveq #1,d0
  5515.     move.l d0,$1fc(a0)    ;secondary type
  5516.     bsr.w datasum
  5517.     move.l d3,$14(a0)    ;data chksum
  5518.     lea $200(a0),a1
  5519.     move.l #$3b990984,d1    ;dd chksum :-)
  5520.     moveq #$e0/4-1-1,d0
  5521.     tst.b hddrive-base(a6)
  5522.     beq.b makehd0
  5523.     move.l #$3b9849bb,d1    ;hd chksum :-)
  5524.     moveq #$1bc/4-1-1,d0
  5525. makehd0:move.l d1,(a1)+
  5526.     moveq #-1,d1
  5527. makebm: move.l d1,(a1)+
  5528.     dbf d0,makebm
  5529.     moveq #$3f,d0
  5530.     tst.b hddrive-base(a6)
  5531.     bne.b makehd
  5532.     move.b d0,$272(a0)    ;root
  5533. makehd:    move.b d0,$2dc(a0)    ;unused
  5534.     lea carbeer(pc),a1    ;16! chr
  5535.     lea $3f0(a0),a0        ;end of bitmap
  5536.     bsr.w txttobuf
  5537. nocyl40:lea linebuf+1-base(a6),a0
  5538.     lea formtxt(pc),a1
  5539.     bsr txttobuf
  5540.     btst #0,d5
  5541.     beq.b low
  5542.     addq.b #1,-(a0)        ;"1"
  5543. low:
  5544.     move.b d5,d0
  5545.     lsr.b  #1,d0
  5546.     lea linebuf+18-base(a6),a0
  5547.     bsr.w bytetod
  5548.     bsr rawline
  5549.     bsr.w csup
  5550.  
  5551.     bsr writeit        ;sets dskerr
  5552.     bsr.w stepdel        ;wait >1.2 ms before sel/step/...
  5553.  
  5554.     lea fabotxt(pc),a1
  5555.     tst.b dskerr-base(a6)
  5556.     bne.b frm8        ;disk removed, abort
  5557.  
  5558.     cmp.w #80,d5
  5559.     bne.b noclrb
  5560.  
  5561.     lea dostrkbuf-base(a6),a0
  5562.     move.w #512/4*2-1,d0
  5563.     moveq #0,d1
  5564. clrbtrk:move.l d1,(a0)+        ;clr 2 sectors
  5565.     dbf d0,clrbtrk
  5566.  
  5567.     tst.b d6        ;quick?
  5568.     beq.b nokwik
  5569.     moveq #1,d5        ;next cyl: 0
  5570. nokwik:
  5571. noclrb:    bsr.w stopit
  5572.     beq.b frm8
  5573.     dbf d5,frm0
  5574.     lea fcpltxt(pc),a1
  5575. frm8:    bsr.w msgout
  5576. frm7:    bsr.w motoff
  5577.     st d7
  5578. frmq:    rts
  5579. carbeer:dc.b "CarnivoreBeerMon"!$80        ;16! chrs
  5580.  
  5581. bootb13:dc.w boot13len        ;wb 1.3 bootblock
  5582.     dc.l 0            ;checksum
  5583.     dc.l 880
  5584.     lea doscod0(pc),a1
  5585.     jsr FindResident(a6)
  5586.     tst.l d0
  5587.     beq.b doscod1
  5588.     move.l d0,a0
  5589.     move.l $16(a0),a0
  5590.     moveq #0,d0
  5591. doscod2:rts
  5592. doscod1:moveq #-1,d0
  5593.     bra.b doscod2
  5594. doscod0:dc.b "dos.library",0
  5595.     dc.w 0
  5596.     dc.l "BEER"
  5597. boot13len=*-bootb13-3    ;dbf,size.w
  5598.  
  5599. bootb20:dc.w boot20len        ;wb 2.0 bootblock (ofs/ffs)
  5600.     dc.l 0
  5601.     dc.l 880
  5602.     lea expname(pc),a1
  5603.     moveq #37,d0
  5604.     jsr OpenLibrary(a6)
  5605.     tst.l d0
  5606.     beq.b no20exp
  5607.     move.l d0,a1
  5608.     bset #6,$22(a1)
  5609.     jsr CloseLibrary(a6)
  5610. no20exp:lea dos20nm(pc),a1
  5611.     jsr FindResident(a6)
  5612.     tst.l d0
  5613.     beq.b no20res
  5614.     move.l d0,a0
  5615.     move.l $16(a0),a0
  5616.     moveq #0,d0
  5617.     rts
  5618. no20res:moveq #-$1,d0
  5619.     rts
  5620. dos20nm:dc.b "dos.library",0
  5621. expname:dc.b "expansion.library",0
  5622.     dc.w 0
  5623.     dc.l "BEER"
  5624. boot20len=*-bootb20-3    ;dbf,size.w
  5625.  
  5626. install:subq.b #1,d3
  5627.     bmi.b usetype    ;no para
  5628.     bne.w instq    
  5629.  
  5630.     move.l dosofs-base(a6),d4
  5631.     lea bootb13+2(pc),a5    ;wb 1.3 ofs bb
  5632.     move.l para-base(a6),d0
  5633.     moveq #4,d1
  5634.     cmp.l d1,d0
  5635.     bhi.w instq
  5636.     beq.b bootok
  5637.     move.b d0,d4
  5638. usetype:lea bootb20+2(pc),a5    ;wb 2.0 bb
  5639. bootok:
  5640.  
  5641.     st wrcmd-base(a6)    ; we want to load/save tracks
  5642.     bsr.w motondt        ;stays selected
  5643.     bsr.w stepup
  5644.     bsr.w stepdwn
  5645.     sf dskerr-base(a6)
  5646.     bsr.w trk0
  5647.     tst.b dskerr-base(a6)
  5648.     bne.w inst7
  5649.     sf truebuf-base(a6)
  5650.     clr.l secinbuf-base(a6)
  5651.     move.b wrcmd-base(a6),wrflag-base(a6)
  5652.     bsr.w testindrive
  5653.     bne.w inst7
  5654.  
  5655.     lea rootblk-base(a6),a4
  5656.     tst.b d3
  5657.     bpl.b inst8        ;para given?
  5658.     move.l a4,d6
  5659.     moveq #0,d5        ;bootblock
  5660.     bsr.w getsec
  5661.     tst.b dskerr-base(a6)
  5662.     bne.b inst7
  5663.     move.l (a4),d4        ;maintain dostype
  5664.     moveq #-4,d0
  5665.     and.l d4,d0
  5666.     cmp.l dosofs-base(a6),d0    ;dostype unknown
  5667.     beq.b inst8    
  5668.     bsr.w nodos    ;disk in drive...
  5669.     bra.b inst7
  5670. inst8:
  5671.     move.l a4,a0
  5672.     moveq #$400/4/2-1,d0
  5673. clrboot:clr.l (a0)+    
  5674.     clr.l (a0)+
  5675.     dbf d0,clrboot
  5676.  
  5677.     move.l a4,a1
  5678.     move.l d4,(a1)+        ;dostype
  5679.     move.w -2(a5),d0    ;size-1
  5680. dcodcpy:move.b (a5)+,(a1)+
  5681.     dbf d0,dcodcpy
  5682.     
  5683.     move.l a4,a0
  5684.     bsr.w bootsum
  5685.     move.l -(a1),4(a0)
  5686.     move.l d3,(a1)
  5687.  
  5688.     move.l a4,d6
  5689.     moveq #0,d5
  5690.     bsr.w putsec        ;d5.l:blk,d6:adr
  5691.     tst.b dskerr-base(a6)
  5692.     bne.b inst7
  5693.     lea $200(a4),a0
  5694.     move.l a0,d6
  5695.     moveq #1,d5
  5696.     bsr.w putsec        ;d5.l:blk,d6:adr
  5697.     tst.b dskerr-base(a6)
  5698.     bne.b inst7
  5699.  
  5700.     bsr.w updatedisk
  5701.     tst.b dskerr-base(a6)
  5702.     bne.b inst7
  5703.     
  5704.     lea insttxt(pc),a1
  5705.     bsr.w msgout
  5706. inst7:    bsr.w motoff        ;deselect
  5707.     st d7
  5708. instq:    rts
  5709.  
  5710. config:    lea conftxt(pc),a1
  5711.     bsr.w msgout
  5712.  
  5713.     lea $200000,a4    ;8mb area
  5714.     lea $e90000,a5    ;board area
  5715.  
  5716.     sf d6    
  5717. nextbd:    lea $e8000c,a3    ;must be 0
  5718.     bsr.w getcnf
  5719.     bne.w noboard
  5720.     lea $e80010,a3    ;manufacturer
  5721.     bsr.w getcnf4
  5722.     tst.l d0    ;=0?
  5723.     beq.w noboard
  5724.  
  5725.     lea $e80000,a3        ;config area
  5726.     bsr.w getcnf
  5727.     not.b d0        ;invert bits
  5728.     move.w d0,d5
  5729.     add.b d5,d5
  5730.     lea unkntxt(pc),a1    ;type 00,01
  5731.     bcc.b bdtxt
  5732.     add.b d5,d5
  5733.     lea zorro3(pc),a1    ;type 10
  5734.     bcc.b bdtxt
  5735.     lea zorro2(pc),a1    ;type 11
  5736. bdtxt:    lea linebuf+1-base(a6),a0
  5737.     bsr.w txttobuf
  5738.  
  5739.     lea linebuf+35-base(a6),a0
  5740.     and.w #%111,d0
  5741.     bne.b no8mb
  5742.     moveq #%1000,d0
  5743. no8mb:    moveq #5,d1
  5744.     add.w d0,d1
  5745.     moveq #0,d0
  5746.     bset d1,d0
  5747.     move.l d0,d2        ;size
  5748.     mulu #$400,d2
  5749.     moveq #"K",d1
  5750.     cmp.w #512,d0
  5751.     bls.b nomeg
  5752.     moveq #"M",d1
  5753.     rol.w #6,d0
  5754. nomeg:    bsr.w hextod        ;boardsize
  5755.     move.b d1,(a0)+
  5756.  
  5757.     lea linebuf+48-base(a6),a0
  5758.     bsr.w getcnf        ;product
  5759.     bsr.w bytetoa_
  5760.  
  5761.     lea linebuf+41-base(a6),a0
  5762.     bsr.w getcnf
  5763.     bsr.w bytetoa_
  5764.     move.l #" ram",d3
  5765.     btst #7,d0
  5766.     bne.b to8mb
  5767.     move.l #" hd ",d3
  5768.     move.l a5,d0
  5769.     add.l d2,a5
  5770.     move.l a5,d1
  5771.     bra.b toboard
  5772. to8mb:    move.l a4,d0
  5773.     add.l d2,a4
  5774.     move.l a4,d1
  5775. toboard:move.l d0,d2        ;startaddr
  5776.     lea linebuf+10-base(a6),a0
  5777.     move.l d3,(a0)+
  5778.     addq.w #1,a0
  5779.     subq.l #1,d1        ;$xxxx0000-$xxyyffff
  5780.     bsr.w twolong_
  5781.  
  5782.     swap.w d2        ;000000xy
  5783.     lsl.w #8,d2        ;0000xy00
  5784.     move.w d2,d0        ;----xy00
  5785.     lsl.w #4,d0        ;----y000
  5786.     swap d2            ;xy000000
  5787.     move.w d0,d2        ;xy00y000    the config value
  5788.                 ;    ^ official
  5789.                 ; ^supra bugsync needs it here
  5790.  
  5791.     addq.w #4,a3        ;skip c/e
  5792.  
  5793.     lea linebuf+54-base(a6),a0
  5794.     bsr.b getcnf2        ;manufacturer
  5795.     bsr.w wordtoa_
  5796.     addq.w #1,a0
  5797.     bsr.b getcnf4        ;serial#
  5798.     bsr.w longtoa_
  5799.     addq.w #1,a0
  5800.     bsr.b getcnf2        ;rom offset
  5801.     bsr.w wordtoa_
  5802.     move.w d2,$e8004a    ;config board,low nibble
  5803.     swap d2
  5804.     move.w d2,$e80048    ;high nibble
  5805.     st d6
  5806.     pea nextbd(pc)        ;config next board
  5807.     bra.w rawline
  5808.  
  5809. noboard:tst.b d6
  5810.     bne.b endbd
  5811.     lea nobdtxt(pc),a1
  5812.     bsr.w msgout
  5813. endbd:    st d7
  5814.     rts
  5815.     
  5816. getcnf4:bsr.b getcnf2
  5817.     swap d0
  5818. getcnf2:bsr.b getcnf
  5819.     lsl.w #8,d0
  5820.     move.w d0,-(a7)
  5821.     bsr.b getcnf
  5822.     or.w (a7)+,d0
  5823.     rts
  5824. getcnf:    move.w (a3)+,d0
  5825.     and.w #$f000,d0
  5826.     lsr.w #8,d0
  5827.     move.w d0,-(a7)
  5828.     move.w (a3)+,d0
  5829.     and.w #$f000,d0
  5830.     rol.w #4,d0
  5831.     or.w (a7)+,d0
  5832.     not.b d0
  5833.     rts
  5834.  
  5835. smd2q:    rts    
  5836. smd2raw:subq.l #1,d3
  5837.     bne.b smd2q
  5838.     move.l para-base(a6),d5
  5839.     btst #0,d5
  5840.     bne.b smd2q
  5841.     sf fami-base(a6)
  5842.     move.l d5,a0
  5843.     bsr.b smdhead
  5844.     beq.b smd2q
  5845.     lea $200(a0),a3
  5846.     move.l d5,a5
  5847. smdcv3:    lea linebuf+1-base(a6),a0
  5848.     lea smdxfer(pc),a1
  5849.     bsr.w txttobuf
  5850.     move.l a5,d0
  5851.     bsr.w longtoa_
  5852.     lea smdtogo(pc),a1
  5853.     bsr.w txttobuf
  5854.     move.b d6,d0
  5855.     bsr.w bytetoa_
  5856.     bsr.w rawline
  5857.     bsr.w csup
  5858.  
  5859.     lea dostrkbuf-base(a6),a4    ;$2000 bytes used
  5860.     move.w #$1ff,d4
  5861. smdcv1:    movem.l (a3)+,d0-d3
  5862.     movem.l d0-d3,(a4)
  5863.     lea $10(a4),a4
  5864.     dbf d4,smdcv1
  5865.     lea dostrkbuf-base(a6),a4
  5866.     move.w #$1fff,d4
  5867. smdcv2:    move.b (a3)+,d0
  5868.     lsl.w #8,d0
  5869.     move.b (a4)+,d0
  5870.     move.w d0,(a5)+
  5871.     dbf d4,smdcv2
  5872.     subq.b #1,d6
  5873.     bne.b smdcv3
  5874.     moveq #$200/4-1,d0
  5875. smdcv4:    move.l mask55-base(a6),(a5)+    ;invalidate buffer
  5876.     dbf d0,smdcv4
  5877.     lea smdcvco(pc),a1
  5878.     bra.w msgout
  5879. smdhead:st d7
  5880. ;    cmp.w #$aabb,8(a0)    ;obsolete
  5881. ;    bne.b smdp1
  5882.     move.b (a0),d6        ;number of blocks
  5883.     bne.b smdp2
  5884. smdp1:    lea smdinva(pc),a1
  5885.     bsr.w msgout
  5886.     moveq #0,d0
  5887. smdp2:    rts        ;beq.b error
  5888. rawplay:sf fami-base(a6)
  5889.     st smdraw-base(a6)
  5890.     subq.l #1,d3
  5891.     bne.w smdpq
  5892.     move.l para-base(a6),d5
  5893.     btst #0,d5
  5894.     bne.w smdpq
  5895.     lea rootblk+$200-base(a6),a0
  5896.     moveq #512/4-1,d0
  5897. rawpl0:    clr.l -(a0)
  5898.     dbf d0,rawpl0    
  5899.     move.w #$0003,(a0)
  5900.     move.l #$aabb0600,8(a0)
  5901.     move.l d5,a1
  5902.     move.l $1a4(a1),d6
  5903.     addq.l #1,d6        ;romlen?
  5904.     moveq #14,d1
  5905.     lsr.l d1,d6        ;# blocks
  5906.     move.b d6,(a0)
  5907.     bra.b smdply0
  5908.  
  5909. famplay:st fami-base(a6)
  5910.     bra.b smdply2
  5911. smdplay:sf fami-base(a6)
  5912. smdply2:sf smdraw-base(a6)
  5913.     subq.l #1,d3
  5914.     bne.w smdpq
  5915.     move.l para-base(a6),d5
  5916.     btst #0,d5
  5917.     bne.w smdpq
  5918.  
  5919.     move.l d5,a0
  5920.     bsr.w smdhead
  5921.     beq.w smdpq
  5922.  
  5923. smdply0:move.b $bfd200,d0
  5924.     and.b #$f8,d0
  5925.     or.b #4,d0
  5926.     move.b d0,$bfd200
  5927.     st $bfe301
  5928.     move.l a7,a5        ;exit sp :-)
  5929.     move.w #$dc00,d1
  5930.     move.l #$200,d2
  5931.     tst.b smdraw-base(a6)
  5932.     bne.b smdply1
  5933.     add.l d2,d5        ;bufptr
  5934.     tst.b fami-base(a6)
  5935.     bne.b famply0
  5936. smdply1:bsr.w sendblk        ;a0:sendbuffer
  5937.     lea smdmisc-base(a6),a0
  5938.     sf (a0)
  5939.     move.w #$2001,d1
  5940.     moveq #1,d2
  5941.     bsr.w sendblk
  5942. famply0:clr.w smdcnt-base(a6)
  5943. smdp3:    bsr.w stopit
  5944.     lea smdabor(pc),a1
  5945.     beq.w smdperr
  5946.     lea linebuf+1-base(a6),a0
  5947.     lea smdxfer(pc),a1
  5948.     bsr.w txttobuf
  5949.     move.l d5,d0
  5950.     bsr.w longtoa_
  5951.     lea smdtogo(pc),a1
  5952.     bsr.w txttobuf
  5953.     move.b d6,d0
  5954.     bsr.w bytetoa_
  5955.     bsr.w rawline
  5956.     bsr.w csup
  5957.     move.w smdcnt-base(a6),d0
  5958.     bsr.b sendpre
  5959.     move.l d5,a0
  5960.     move.w #$8000,d1
  5961.     move.l #$2000,d2
  5962.     tst.b fami-base(a6)
  5963.     bne.b famply3
  5964.     add.l d2,d2
  5965. famply3:add.l d2,d5        ;bufptr
  5966.     bsr.w blksend
  5967.     addq.w #1,smdcnt-base(a6)
  5968.     subq.b #1,d6
  5969.     bne.b smdp3
  5970.     tst.b fami-base(a6)
  5971.     beq.b smdply3
  5972.     move.l para-base(a6),a0
  5973.     move.w #$400,d1
  5974.     move.w #$200,d2
  5975.     bsr.w sendblk
  5976.     moveq #6,d0
  5977.     move.b 2(a0),d1
  5978.     lsl.w #8,d1
  5979.     or.b #1,d1
  5980.     moveq #0,d2
  5981.     bsr.b send02
  5982.     bra.b famply2
  5983. smdply3:lea smdmisc-base(a6),a0
  5984.     move.b #3,(a0)
  5985.     move.w #$2001,d1
  5986.     move.w #1,d2
  5987.     bsr.w sendblk
  5988. famply2:lea smdcomp(pc),a1
  5989. smdperr:bsr.w msgout
  5990.     st d7
  5991. smdpq:    rts
  5992.  
  5993. ;    movem.l    d0/d3/d4,-(a7)
  5994. ;    bsr.b sendini
  5995. ;    move.w    d0,d1
  5996. ;    moveq    #4,d0
  5997. ;    bra.b    lbC000282
  5998. sendpre:movem.l    d0/d3/d4,-(a7)
  5999.     moveq    #0,d1
  6000.     move.b    d0,d1
  6001.     moveq    #5,d0
  6002. lbC000282:    moveq #0,d2
  6003.     bsr.b send02
  6004.     movem.l (a7)+,d0/d3/d4
  6005.     rts
  6006.  
  6007. send02:    movem.l    d3/d4,-(a7)    ;init,d0.b,d1.w,d2.w,crc.b
  6008.     bsr.b sendini
  6009.     moveq #$ffffff81,d3    ;chksum
  6010.     move.b d0,d4
  6011.     bsr.b sendmeg
  6012.     move.w d1,d4
  6013.     bsr.b sendmeg
  6014.     lsr.w #8,d4
  6015.     bsr.b sendmeg
  6016.     move.w d2,d4
  6017.     bsr.b sendmeg
  6018.     lsr.w #8,d4
  6019.     bsr.b sendmeg
  6020.     move.b d3,d4        ;chksum
  6021.     bsr.b sendmeg
  6022.     movem.l    (a7)+,d3/d4
  6023.     rts
  6024. sendini:moveq #$ffffffd5,d4
  6025.     bsr.b sendmeg
  6026.     moveq #$ffffffaa,d4
  6027.     bsr.b sendmeg
  6028.     moveq #$ffffff96,d4
  6029. sendmeg:eor.b d4,d3
  6030.     move.l #$400000,d7
  6031. shake:    subq.l #1,d7
  6032.     beq.b noshake
  6033.     btst #0,$bfd000
  6034.     bne.b shake
  6035.     move.b d4,$bfe101
  6036.     eor.b #4,$bfd000
  6037.     rts
  6038. noshake:move.l a5,a7
  6039.     lea smdtime(pc),a1
  6040.     bra.w smdperr
  6041.  
  6042. blksend:movem.l    d0-d4/a0,-(a7)
  6043.     moveq #0,d0
  6044.     tst.b smdraw-base(a6)
  6045.     beq.b sendit
  6046.     bsr.b send02
  6047.     moveq #$ffffff81,d3
  6048.     bsr.b blksnd0
  6049.     lea -$4001(a0),a0    ;adjust to highbyte
  6050.     pea sendit2(pc)        ;continue with crc
  6051. blksnd0:move.w #$1fff,d2
  6052. sendlp1:addq.w #1,a0        ;lowbytes first
  6053.     move.b (a0)+,d4
  6054.     bsr.b sendmeg
  6055.     dbf d2,sendlp1
  6056.     rts
  6057.  
  6058. ;    movem.l    d0-d4/a0,-(a7)
  6059. ;    moveq    #2,d0
  6060. ;    bra.b sendit
  6061. sendblk:movem.l d0-d4/a0,-(a7)
  6062.     moveq #0,d0
  6063. sendit:    bsr.w send02
  6064.     subq.w    #1,d2
  6065.     moveq #$ffffff81,d3
  6066. sendlp0:move.b (a0)+,d4
  6067.     bsr.b sendmeg
  6068.     dbf d2,sendlp0
  6069. sendit2:move.b d3,d4    ;crc
  6070.     bsr.b sendmeg
  6071.     movem.l    (a7)+,d0-d4/a0
  6072.     rts
  6073.  
  6074.  
  6075. i:    tst.b d3
  6076.     bne.w iq
  6077.  
  6078.     lea linebuf+1-base(a6),a0    ;info about agnus regs/cpu vectors
  6079.     lea $dff096,a1
  6080.     move.l a1,d0
  6081.     bsr.w adrtoa_
  6082.     moveq #":",d4
  6083.     move.b d4,(a0)+
  6084.     move.w rdff002-base(a6),d0
  6085.     bsr.w wordtoa_
  6086.  
  6087.     addq.w #2,a0
  6088.     addq.w #4,a1        ;$dff09a
  6089.     move.l a1,d0
  6090.     bsr.w adrtoa_
  6091.     move.b d4,(a0)+
  6092.     move.w rdff01c-base(a6),d0
  6093.     bsr.w wordtoa_
  6094.  
  6095.     addq.w #2,a0
  6096.     addq.w #2,a1        ;$dff09c
  6097.     move.l a1,d0
  6098.     bsr.w adrtoa_
  6099.     move.b d4,(a0)+
  6100.     move.w rdff01e-base(a6),d0
  6101.     bsr.w wordtoa_
  6102.  
  6103.     addq.w #2,a0
  6104.     addq.w #2,a1        ;$dff09e
  6105.     move.l a1,d0
  6106.     bsr.w adrtoa_
  6107.     move.b d4,(a0)+
  6108.     move.w rdff010-base(a6),d0
  6109.     bsr.w wordtoa_
  6110.     bsr.w rawline
  6111.     bsr.w csdown
  6112.  
  6113.     lea intvecs-base(a6),a1        ;$0-$1f,$20-$3f...
  6114.     moveq #8-1,d3
  6115. i1:    addq.w #1,a0
  6116.     moveq #7,d0
  6117.     sub.l d3,d0
  6118.     lsl.l #5,d0
  6119.     bsr.w wordtoa
  6120.     move.b #":",(a0)+
  6121.     moveq #8-1,d2
  6122. i0:    addq.w #1,a0
  6123.     move.l (a1)+,d0
  6124.     bsr.w longtoa
  6125.     dbf d2,i0    
  6126.     bsr.w rawline
  6127.     dbf d3,i1
  6128.     st d7
  6129. iq:    rts
  6130.  
  6131. p:    cmp.b #2,d3
  6132.     bcs.w pq
  6133.     cmp.b #3,d3
  6134.     bhi.w pq
  6135.     beq.b p2
  6136.     move.w #256,para+10-base(a6)    ;default period
  6137. p2:    moveq #0,d0
  6138.     btst d0,para+3-base(a6)
  6139.     bne.b pq
  6140.     btst d0,para+7-base(a6)
  6141.     bne.b pq
  6142.  
  6143.     move.l para-base(a6),d0
  6144.     cmp.l para+4-base(a6),d0
  6145.     bcc.b pq
  6146.  
  6147.     cmp.l himem-base(a6),d0    ;sound in chipmem!
  6148.     bcc.b pq
  6149.     move.l para+4-base(a6),d1
  6150.     cmp.l himem-base(a6),d1
  6151.     bhi.b pq
  6152.  
  6153.     move.l #$80808080,$dff09a
  6154.  
  6155. p0:    bsr.b sndpos
  6156. p3:    cmp.b #$1b,ascii-base(a6)
  6157.     beq.b p1
  6158.     tst.l para+4-base(a6)
  6159.     bne.b p0
  6160.     btst #7,$dff01f
  6161.     beq.b p0
  6162. p1:    move.l #$00800080,$dff09a
  6163.     move.w #$0003,$dff096
  6164.     bsr.b sndpos
  6165.     bsr.w csdown
  6166.     st d7
  6167. pq:    rts
  6168. sndpos:    lea linebuf+1-base(a6),a0
  6169.     lea sndtxt(pc),a1
  6170.     bsr.w txttobuf
  6171.     move.l para-base(a6),d0
  6172.     bsr.w adrtoa_        ;chipmem, use only 24 bit
  6173.     bsr.w rawline
  6174.     bra.w csup
  6175.     
  6176. g:    cmp.b #1,d3
  6177.     bne.w gq
  6178.  
  6179.     move.l para-base(a6),d0
  6180.     btst #0,d0
  6181.     bne.w gq
  6182.  
  6183.     lea mmuoffb(pc),a0
  6184.     bsr.w mmujob
  6185.     move.l d0,bmmmutc-base(a6)
  6186.     bsr.w dobrkp        ;insert bp
  6187.  
  6188.     bsr.w loadmmu
  6189.     bsr.w loadfpu
  6190.  
  6191.     move #$3700,sr        ;use isp|(68020+:msp)
  6192.     move.l regs+64+8-base(a6),a7    ;msp
  6193.     move #$2700,sr        ;use isp
  6194.     move.l regs+64+4-base(a6),a7    ;isp
  6195.  
  6196.     tst.b cpu-base(a6)    ;68010+ ?
  6197.     beq.b nomsp2
  6198.     move.l regs+64+12-base(a6),a5    ;vbr
  6199.     dc.l movec_a5.vbr
  6200.     move.b sfcdfc-base(a6),d0
  6201.     dc.l movec_d0.sfc
  6202.     move.b sfcdfc+1-base(a6),d0
  6203.     dc.l movec_d0.dfc
  6204.     cmp.b #2,cpu-base(a6)    ;68020+ ?
  6205.     bcs.b nomsp2
  6206.  
  6207.     move.l regs+64+16-base(a6),a5    ;cacr
  6208.     dc.l movec_a5.cacr
  6209.     bsr.w pushcache
  6210.  
  6211.     cmp.b #4,cpu-base(a6)        ;68040?
  6212.     beq.b nomsp2
  6213.     move.l regs+64+20-base(a6),a5    ;caar
  6214.     dc.l movec_a5.caar
  6215. nomsp2:    move.l regs+64-base(a6),a0    ;usp
  6216.     move.l a0,usp
  6217.  
  6218.     move.w regs+64+28-base(a6),d0
  6219.     and.w #$3fff,d0            ;clr tracebits
  6220.     move.w d0,sr
  6221.     pea g1(pc)
  6222.     move.l para-base(a6),-(a7)
  6223.     move.w regs+64+28-base(a6),ccr
  6224.     movem.l regs-base(a6),d0-d7/a0-a6    
  6225.     rts
  6226. gg1:    add.l #4,a7
  6227. g1:    movem.l a6,-(a7)        ;flags ok
  6228.     lea base(pc),a6
  6229.     movem.l d0-d7/a0-a5,regs-base(a6)
  6230.     movem.l (a7)+,a0        ;a6
  6231.     movem.l a0/a7,regs+56-base(a6)    ;a6/a7
  6232.  
  6233.     lea stackend-base(a6),a7    ;lea $80000,a7 (usp|isp|msp)
  6234.     move.l a7,a3
  6235.     lea $10.w,a0        ;illegal vec
  6236.     add.l vbreg-base(a6),a0
  6237.     move.l (a0),a1        ;old illegal vec
  6238.     lea savereg(pc),a2    ;uses d0
  6239.     movem.l a2,(a0)            ;?flags ok
  6240. wrongpc:illegal                ;store sr,pc,noint,go sv
  6241.     move.l a1,(a0)            ;restore illegal vec
  6242.     move.l a7,regs+64+4-base(a6)    ;isp
  6243.     move usp,a7
  6244.     move.l a7,regs+64-base(a6)    ;usp
  6245.     move.l a3,a7
  6246.  
  6247.     tst.b cpu-base(a6)    ;68010+ ?
  6248.     beq.b nomsp
  6249.     dc.l movec_vbr.a5    
  6250.     move.l a5,regs+64+12-base(a6)    ;vbr
  6251.     dc.l movec_dfc.d0
  6252.     move.w d0,-(a7)
  6253.     dc.l movec_sfc.d0
  6254.     lsl.w #8,d0
  6255.     or.w (a7)+,d0
  6256.     move.w d0,sfcdfc-base(a6)    ;sfcdfc
  6257.  
  6258.     cmp.b #2,cpu-base(a6)    ;68020+ ?
  6259.     bcs.b nomsp
  6260.     dc.l movec_msp.a5
  6261.     move.l a5,regs+64+8-base(a6)    ;msp
  6262.     dc.l movec_cacr.a5
  6263.     move.l a5,regs+64+16-base(a6)    ;cacr
  6264.     cmp.b #4,cpu-base(a6)        ;68040?
  6265.     beq.b nomsp
  6266.     dc.l movec_caar.a5
  6267.     move.l a5,regs+64+20-base(a6)    ;caar
  6268. nomsp:    move.w regs+64+28-base(a6),d0    ;start sr
  6269.     lea regs+60-base(a6),a1        ;ptr start a7
  6270.     move.l (a1)+,a0            ;start a7
  6271.     btst #13,d0
  6272.     beq.b fixa72            ;start usermode
  6273.     addq.w #4,a1            ;skip usp,set isp
  6274.     btst #12,d0
  6275.     beq.b fixa72
  6276.     addq.w #4,a1            ;skip isp,set msp
  6277. fixa72:    move.l a0,(a1)
  6278.  
  6279.     bsr.w savemmu
  6280.     bsr.w savefpu
  6281.  
  6282.     lea mmuoffh(pc),a0
  6283.     bsr.b mmujob
  6284.     bsr.b dobrkp        ;remove bp
  6285.     move.l bmmmutc-base(a6),d0
  6286.     lea mmurest(pc),a0
  6287.     bsr.b mmujob
  6288.  
  6289.     lea wrongpc(pc),a1
  6290.     cmp.l regs+64+24-base(a6),a1    ;pc?
  6291.     bne.b g3
  6292.     move.l breakpc-base(a6),regs+64+24-base(a6)
  6293. g3:    bra.w warm
  6294. gq:    rts
  6295.  
  6296. mmujob:    tst.b mmu-base(a6)    ;nommu
  6297.     beq.b mmujob0
  6298.     cmp.b #3,mmu-base(a6)    ;68040mmu
  6299.     beq.b mmujob0
  6300.     lea mmujbuf-base(a6),a2 
  6301.     dc.l pmove_tc.a2
  6302.     jsr (a0)
  6303.     dc.l pmove_a2.tc
  6304. mmujob0:rts
  6305. mmuoffb:move.l (a2),d0
  6306. mmuoffh:bclr #7,(a2)
  6307.     rts
  6308. mmurest:move.l d0,(a2)
  6309.     rts
  6310. mmuonh:    bset #7,(a2)
  6311.     rts
  6312.  
  6313. dobrkp:    moveq #brkpnum-1,d0
  6314.     lea brkpadr-base(a6),a0
  6315.     lea brkpbuf-base(a6),a1
  6316. dbrk0:    move.l (a0)+,a2
  6317.     move.l a2,d1
  6318.     beq.b dbrk1
  6319.     move.w (a2),-(a7)
  6320.     move.w (a1),(a2)
  6321.     move.w (a7)+,(a1)+
  6322. dbrk1:    dbf d0,dbrk0
  6323. pushcache:
  6324.     cmp.b #4,cpu-base(a6)    ;68040?
  6325.     bne.b dbrk4
  6326.     dc.w cpusha_bc
  6327. dbrk4:    rts
  6328. invcache:cmp.b #4,cpu-base(a6)
  6329.     bne.b invcac0
  6330. ;    dc.w cinva_bc
  6331.     rts    
  6332. invcac0:cmp.b #2,cpu-base(a6)    ;68020+ ?
  6333.     bcs.b dbrk2
  6334.     move.l d0,-(a7)
  6335.     dc.l movec_cacr.d0
  6336.     or.w #%0000100000001000,d0    ;clr data/instr cache
  6337.     dc.l movec_d0.cacr
  6338.     move.l (a7)+,d0
  6339. dbrk2:    rts
  6340.  
  6341. hunk:    movem.l para-base(a6),d2/d4-d6    ;start,end,(dest),(jmp)
  6342.     btst #0,d2
  6343.     bne.b hunkq
  6344.     subq.l #2,d3    ;start,end
  6345.     bmi.b hunkq
  6346.     bne.b hn3
  6347.     move.l d2,d5    ;dest=start
  6348. hn3:    subq.l #2,d3
  6349.     bmi.b hn0
  6350.     beq.b hn5
  6351. hunkq:    rts
  6352. hn0:    move.l d5,d6    ;jmp=dest
  6353. hn5:    lea $100.w,a0
  6354.     cmp.l a0,d2
  6355.     bcs.b hunkq
  6356.     move.l d4,d3
  6357.     sub.l d2,d3    ;size
  6358.     bmi.b hunkq
  6359.  
  6360.     move.l d3,d0    ;prgbytes
  6361.     move.l d4,a0
  6362.     move.l d2,a1
  6363. hn1:    subq.l #1,d0
  6364.     bmi.b hn2
  6365.     move.b -(a0),hunkend-hunkdata(a0)    
  6366.     bra.b hn1
  6367. hn2:    lea hunkdata(pc),a0
  6368.     moveq #hunkend-hunkdata-1,d0
  6369. hn4:    move.b (a0)+,(a1)+
  6370.     dbf d0,hn4
  6371.  
  6372.     move.l d2,a0
  6373.     move.l d3,hunksiz+2-hunkdata(a0)    ;size
  6374.     move.l d5,hunkmem+2-hunkdata(a0)    ;dest
  6375.     move.l d6,hunkjmp+2-hunkdata(a0)    ;jmp
  6376.  
  6377.     addq.l #3,d3        ;size+3
  6378.     lsr.l #2,d3
  6379.     moveq #(hunkend-hunkmov)/4,d0
  6380.     add.l d0,d3
  6381.     move.l d3,hunklong1-hunkdata(a0)
  6382.     move.l d3,hunklong2-hunkdata(a0)
  6383.     lsl.l #2,d3
  6384.     add.l d2,d3
  6385.     lea (hunkmov-hunkdata).w,a3
  6386.     add.l d3,a3
  6387.     lea $3f2.w,a0
  6388.     move.l a0,(a3)+
  6389.     move.l a0,(a3)+
  6390.  
  6391.     lea linebuf+1-base(a6),a0
  6392.     lea objtxt(pc),a1
  6393.     bsr.w txttobuf
  6394.     move.l d2,d0
  6395.     move.l a3,d1
  6396.     bsr.w twolong_
  6397.     bsr.w rawline
  6398.     st d7
  6399. hnq:    rts
  6400. hunkdata:dc.l $3f3,0,1,0,0    ;datalen=:4!
  6401. hunklong1:dc.l 0,$3e9
  6402. hunklong2:dc.l 0
  6403. hunkmov:move.l #$7fff7fff,$dff09a    ;you may edit this
  6404.     move.w #$0000,$dff096        ;after hunking data
  6405. hunksiz:move.l #0,d7        ;sizeinbytes
  6406.     lea hunkend(pc),a4
  6407. hunkmem:lea $000000,a5        ;prgdest
  6408.     lea $80000,a7        ;this mostly is the USP
  6409. hunkjmp:pea $000000
  6410.     movem.w mover(pc),d0-d4
  6411.     cmp.l a5,a4
  6412.     bhi.b mvdown
  6413.     eor.w #$01f8,d2        ;move.b -(a4),-(a5)
  6414.     add.l d7,a4
  6415.     add.l d7,a5
  6416. mvdown:    lea $100.w,a1        ;we have MC68851/81/82 traps :-)
  6417.     movem.w d0-d4,(a1)
  6418.     jmp (a1)
  6419.     dc.b "BEER1993"        ;don't change size, better nothing
  6420. mover:    subq.l #1,d7        ;this is located somewhere at $100...
  6421.     bmi.b endmov
  6422.     move.b (a4)+,(a5)+
  6423.     bra.b mover
  6424. endmov:    rts        ;prgstart
  6425. hunkend:
  6426.  
  6427. calc:    lea linebuf+1-base(a6),a0
  6428.     lea 2(a5),a3
  6429.     bsr.b getval
  6430.     move.l d0,d5
  6431.  
  6432. calc1:    bsr.b skipit
  6433.     beq.b calcout
  6434.     move.b (a3)+,d4
  6435.  
  6436.     lea calc_op(pc),a4
  6437.     lea calccpu-4(pc),a1
  6438. calc0:    move.b (a4)+,d0
  6439.     beq.w calcerr
  6440.     addq.w #4,a1
  6441.     cmp.b d4,d0
  6442.     bne.b calc0
  6443.  
  6444.     bsr.b getval
  6445.     move.l d0,d6
  6446.     jsr (a1)
  6447.     bra.b calc1
  6448.  
  6449. skipit:    cmp.b #" ",(a3)
  6450.     bne.b calc2
  6451.     addq.w #1,a3
  6452.     lea xchars(a5),a1
  6453.     cmp.l a1,a3
  6454.     bcs.b skipit        ;beq.b endtxt
  6455. calc2:    rts
  6456.  
  6457. getval:    bsr.b skipit
  6458.     move.b (a3),d1
  6459.     cmp.b #34,d1    ;"
  6460.     beq.b calc9
  6461.     cmp.b #39,d1    ;'
  6462.     bne.b calc8
  6463. calc9:    addq.w #1,a3
  6464.     moveq #0,d0
  6465.     moveq #4+1-1,d2
  6466. calc10:    cmp.b (a3)+,d1
  6467.     beq.b calc11
  6468.     lsl.l #8,d0
  6469.     move.b -1(a3),d0
  6470.     dbf d2,calc10    
  6471.     addq.w #4,a7
  6472. calc11:    rts
  6473. calc8:    cmp.b #"#",(a3)
  6474.     bne.b calc3
  6475.     addq.w #1,a3
  6476.     bra.w atodlong
  6477. calc3:    bra.w atolong
  6478.  
  6479. calcout:move.l d5,d0
  6480.     bsr longtoa_
  6481.  
  6482.     bsr.w chr4buf
  6483.     dc.l " = #"
  6484.     
  6485.     move.l d5,d0
  6486.     bpl.b calc6
  6487.     move.b #"-",(a0)+
  6488.     neg.l d0
  6489. calc6:    bsr hextod
  6490.  
  6491.     bsr.w chr4buf
  6492.     dc.l " = %"
  6493.  
  6494.     move.l d5,d0
  6495.     bsr hextob
  6496.  
  6497.     bsr.w chr4buf
  6498.     dc.l ' = "'
  6499.  
  6500.     move.l d5,d0
  6501.     moveq #4-1,d1
  6502. calc7:    rol.l #8,d0
  6503.     move.b d0,(a0)+
  6504.     dbf d1,calc7
  6505.     move.b #34,(a0)+
  6506.  
  6507. calc4:    bsr rawline
  6508.     st d7
  6509. calcerr:rts
  6510.  
  6511. calc_op:dc.b '+-*!&=<>/',0
  6512.     even
  6513. calccpu:add.l    d6,d5
  6514.     rts
  6515.     sub.l    d6,d5
  6516.     rts
  6517.     muls    d6,d5
  6518.     rts
  6519.     or.l    d6,d5
  6520.     rts
  6521.     and.l    d6,d5
  6522.     rts
  6523.     eor.l    d6,d5
  6524.     rts
  6525.     lsl.l    d6,d5
  6526.     rts
  6527.     lsr.l    d6,d5
  6528.     rts
  6529.     tst.w    d6
  6530.     beq.b    calcovl
  6531.     divs    d6,d5
  6532.     bvs.b    calcovl
  6533.     ext.l    d5
  6534.     rts
  6535. calcovl:addq.w    #4,a7
  6536.     lea    calctxt(pc),a1
  6537.     bsr    txttobuf
  6538.     bra.b    calc4
  6539.  
  6540. r:    lea regs-base(a6),a2
  6541.     cmp.b #2,d3
  6542.     bhi.w rq
  6543.     tst.b d3
  6544.     beq.w r0
  6545.  
  6546.     cmp.b #1,d3
  6547.     bne.w r6
  6548.  
  6549.     moveq #0,d2
  6550.     moveq #4-1,d0
  6551.     bclr #5,(a0)
  6552.     cmp.b #"R",(a0)
  6553.     bne.b r7
  6554.     subq.w #3,a0        ;cacr/caar
  6555. r7:    move.b (a0)+,d1
  6556.     cmp.b #" ",d1
  6557.     beq.b r8
  6558.     bclr #5,d1
  6559.     lsl.l #8,d2
  6560.     or.b d1,d2
  6561.     dbf d0,r7
  6562. r8:    lea 64(a2),a1        ;uspadr
  6563.     move.l para-base(a6),d0
  6564.     cmp.l #"USP",d2
  6565.     beq.b r9
  6566.     addq.w #4,a1
  6567.     cmp.l #"ISP",d2
  6568.     beq.b r9
  6569.     addq.w #4,a1
  6570.     cmp.l #"MSP",d2
  6571.     beq.b r9
  6572.     addq.w #4,a1
  6573.     cmp.l #"VBR",d2
  6574.     beq.b r9
  6575.     addq.w #4,a1
  6576.     cmp.l #"CACR",d2
  6577.     beq.b r9b
  6578.     addq.w #4,a1
  6579.     cmp.l #"CAAR",d2
  6580.     beq.b r9b
  6581.     addq.w #4,a1
  6582.     cmp.l #"PC",d2
  6583.     bne.b r10
  6584. r9:    bclr #0,d0
  6585. r9b:    move.l d0,(a1)
  6586. r10:    moveq #7,d1
  6587.     cmp.l #"SFC",d2
  6588.     bne.b rsfc
  6589.     cmp.l d1,d0
  6590.     bhi.w rq
  6591.     move.b d0,sfcdfc-base(a6)
  6592. rsfc:    cmp.l #"SR",d2
  6593.     bne.b r0
  6594.     move.w d0,64+28(a2)
  6595.     bra.b r0
  6596.  
  6597. r6:    move.w para+6-base(a6),d1        ;d0-a7
  6598.     cmp.w #$dfc,d1
  6599.     bne.b rrx
  6600.     move.l para-base(a6),d0
  6601.     moveq #7,d2
  6602.     cmp.l d2,d0
  6603.     bhi.w rq
  6604.     move.b d0,sfcdfc+1-base(a6)
  6605.     bra.b r0
  6606. rrx:    and.w #%1111111111111000,d1
  6607.     cmp.w #$a0,d1
  6608.     beq.b r5
  6609.     cmp.w #$d0,d1
  6610.     bne.w rq
  6611. r5:    move.w para+6-base(a6),d1
  6612.     sub.w #$d0,d1
  6613.     bcc.b r4
  6614.     add.w #$38,d1    
  6615. r4:    add.w d1,d1            ;lsl.w #2,d1
  6616.     add.w d1,d1
  6617.     move.l para-base(a6),(a2,d1.w)    ;write value
  6618.     cmp.w #60,d1            ;a7?
  6619.     bne.b r0
  6620.     lea 64(a2),a1            ;uspadr
  6621.     btst #13,64+28(a2)        ;sr
  6622.     beq.b r23
  6623.     addq.w #4,a1
  6624.     btst #12,64+28(a2)        ;sr
  6625.     beq.b r23
  6626.     addq.w #4,a1
  6627. r23:    move.l para-base(a6),(a1)        ;store usp/isp/msp
  6628. r0:    tst.b excnum-base(a6)
  6629.     beq.b r21
  6630.     move.w exceptsr-base(a6),64+28(a2)    ;sr
  6631.     move.l exceptpc-base(a6),64+24(a2)    ;pc
  6632.     move.l exceptpc-base(a6),para-base(a6)
  6633.  
  6634. r21:    move.l 64(a2),d0    ;usp
  6635.     btst #13,64+28(a2)    ;a7:usp?
  6636.     beq.b r22
  6637.     move.l 64+4(a2),d0    ;isp
  6638.     btst #12,64+28(a2)
  6639.     beq.b r22
  6640.     move.l 64+8(a2),d0    ;msp
  6641. r22:    move.l d0,64-4(a2)    ;a7
  6642.  
  6643.     lea linebuf-base(a6),a0
  6644.     move.l #" D0:",d4
  6645.     moveq #16-1,d6
  6646. r1:    move.l d4,(a0)+
  6647. r2:    move.l (a2)+,d0
  6648.     bsr.w longtoa
  6649.     addq.w #1,a0
  6650.     moveq #7,d0
  6651.     and.b d6,d0
  6652.     dbeq d6,r2
  6653.     bsr.w rawline
  6654.     move.l #" A0:",d4
  6655.     dbf d6,r1
  6656.  
  6657.     cmp.b #1,cpu-base(a6)
  6658.     beq.b r68010
  6659.     bcs.w r68000
  6660.     cmp.b #4,cpu-base(a6)        ;68040?
  6661.     beq.b r68040
  6662.     move.w #" C",(a0)+        ;68020+
  6663.     move.l #"AAR:",(a0)+
  6664.     move.l regs+64+20-base(a6),d0    ;caar
  6665.     bsr longtoa
  6666. r68040:    addq.w #2,a0
  6667.     move.l #"MSP:",(a0)+
  6668.     move.l regs+64+8-base(a6),d0        ;msp
  6669.     bsr longtoa
  6670. r68010:    addq.w #2,a0            ;68010+
  6671.     move.l #"VBR:",(a0)+
  6672.     move.l regs+64+12-base(a6),d0    ;vbr
  6673.     bsr longtoa
  6674.     addq.w #3,a0    
  6675.     bsr.w chr4buf
  6676.     dc.l "SFC:"
  6677.     moveq #"0",d0
  6678.     add.b sfcdfc-base(a6),d0
  6679.     move.b d0,(a0)+
  6680.     addq.w #1,a0
  6681.     bsr.w chr4buf
  6682.     dc.l "DFC:"
  6683.     moveq #"0",d0
  6684.     add.b sfcdfc+1-base(a6),d0
  6685.     move.b d0,(a0)+
  6686.     bsr.w rawline
  6687.  
  6688.     cmp.b #1,cpu-base(a6)
  6689.     bls.b r68000
  6690.     move.w #" C",(a0)+        ;68020+
  6691.     move.l #"ACR:",(a0)+
  6692.     move.l regs+64+16-base(a6),d0    ;cacr
  6693.     move.l d0,d2            ;bitcacr
  6694.     bsr.w longtoa
  6695.     addq.w #2,a0
  6696.     bsr.w cacrbit
  6697.     bsr.w rawline
  6698.  
  6699. r68000:    addq.w #2,a0
  6700.     move.l #"USP:",(a0)+
  6701.     move.l regs+64-base(a6),d0        ;usp
  6702.     bsr longtoa
  6703.     addq.w #2,a0
  6704.     move.l #"ISP:",(a0)+
  6705.     move.l regs+64+4-base(a6),d0        ;isp
  6706.     bsr longtoa
  6707.     addq.w #2,a0
  6708.     move.l #" SR:",(a0)+
  6709.     move.w regs+64+28-base(a6),d0    ;sr
  6710.     move.w d0,d2
  6711.     bsr wordtoa
  6712.     addq.w #2,a0
  6713.  
  6714.     move.b #"T",(a0)+
  6715.     moveq #"1",d0
  6716.     moveq #15,d3
  6717.     bsr.w bitstat        ;15
  6718.     cmp.b #1,cpu-base(a6)
  6719.     bls.b rbs1
  6720.     move.b #"T",(a0)+    ;68020+
  6721.     moveq #"0",d0
  6722.     bsr.w bitstat        ;14
  6723. rbs1:    moveq #13,d3
  6724.     moveq #"S",d0
  6725.     bsr.w bitstat        ;13
  6726.     cmp.b #1,cpu-base(a6)
  6727.     bls.b rbs0
  6728.     moveq #"M",d0        ;68020+
  6729.     bsr.w bitstat        ;12
  6730. rbs0:    moveq #4,d3
  6731.     moveq #"X",d0
  6732.     bsr.w bitstat        ;4
  6733.     moveq #"N",d0
  6734.     bsr.w bitstat        ;3
  6735.     moveq #"Z",d0
  6736.     bsr.w bitstat        ;2
  6737.     moveq #"V",d0
  6738.     bsr.w bitstat        ;1
  6739.     moveq #"C",d0
  6740.     bsr.w bitstat        ;0
  6741.     bsr.w rawline
  6742.  
  6743. rbp0:    cmp.b #3,excnum-base(a6)    ;illegal instr|bp?
  6744.     bne.b rbp1
  6745.     lea brkpadr-base(a6),a0
  6746.     move.l exceptpc-base(a6),d1
  6747.     moveq #brkpnum-1,d0
  6748. rbp2:    cmp.l (a0)+,d1
  6749.     bne.b rbp3
  6750.     lea brktxt(pc),a1
  6751.     lea linebuf+1-base(a6),a0
  6752.     bsr.w txttobuf
  6753.     bra.b rexc1
  6754. rbp3:    dbf d0,rbp2
  6755.  
  6756. rbp1:    move.b excnum-base(a6),d0
  6757.     beq.b r14
  6758.     lea linebuf+1-base(a6),a0
  6759.     lea exctxt(pc),a1
  6760.     cmp.b (a1)+,d0
  6761.     bsr.w indextx
  6762.     lea excext(pc),a1
  6763.     move.b -(a0),d0
  6764.     cmp.b (a1),d0
  6765.     bhi.b rexc1
  6766.     move.b #" ",(a0)
  6767.     cmp.b (a1)+,d0
  6768.     bsr.w indextx
  6769. rexc1:
  6770.     cmp.b #2,excnum-base(a6)    ;adr err
  6771.     bne.b r18
  6772.     lea linebuf+29-base(a6),a0
  6773.     move.w excinstr-base(a6),d0
  6774.     bsr.w wordtoa
  6775.     lea linebuf+43-base(a6),a0
  6776.     move.l excadr-base(a6),d0
  6777.     bsr.w longtoa_
  6778. r18:    bsr.w rawline
  6779.     sf excnum-base(a6)
  6780.  
  6781. r14:    move.l regs+64+24-base(a6),a5    ;pc
  6782.     bsr.w disasm
  6783.     bsr.w rawline
  6784.  
  6785.     st d7
  6786. rq:    rts
  6787. bitstat:move.b d0,(a0)+
  6788. bitcacr:move.b #"=",(a0)+
  6789.     btst d3,d2        ;d2:sr,d3:bit#
  6790.     seq (a0)
  6791.     add.b #"1",(a0)
  6792.     addq.w #2,a0
  6793.     subq.b #1,d3    
  6794.     rts
  6795.  
  6796. cacrbit:cmp.b #4,cpu-base(a6)
  6797.     beq.b cacr40
  6798.     moveq #3,d3        ;ci
  6799.     lea cacrtx2(pc),a1
  6800.     cmp.b #2,cpu-base(a6)    ;68020
  6801.     beq.b bitlp0
  6802.     lea cacrtxt(pc),a1
  6803.     moveq #13,d3        ;wa
  6804. bitlp0:    bsr.b txttst
  6805.     bmi.b endcacr
  6806.     cmp.b #7,d3        ;wa-ed
  6807.     bne.b bitlp0
  6808.     subq.b #3,d3        ;ibe-ei
  6809.     bra.b bitlp0
  6810. endcacr:rts
  6811. cacr40:    moveq #31,d3
  6812.     lea cacrtx3(pc),a1
  6813.     bsr.b txttst
  6814.     moveq #15,d3
  6815. txttst:    bsr.w txttobuf
  6816.     bra.b bitcacr
  6817. fpcrbit:lea fpcrtxt(pc),a1
  6818.     moveq #15,d3        ;bsun
  6819. bitlp1:    bsr.b txttst
  6820.     cmp.b #7,d3        ;bsun-inex2,prec-rnd
  6821.     bne.b bitlp1
  6822.     rts
  6823. fpsrbit:lea fpsrtxt(pc),a1
  6824.     moveq #27,d3        ;n
  6825. bitlp2:    bsr.b txttst
  6826.     cmp.b #2,d3        ;iop-inex
  6827.     beq.b endfpsr
  6828.     cmp.b #22,d3        ;n-s
  6829.     bne.b bitlp2
  6830.     bsr.w chr2buf
  6831.     dc.w "Q="
  6832.     move.l d2,d0
  6833.     swap d0
  6834.     moveq #%01111111,d1
  6835.     and.l d1,d0
  6836.     bsr.w bytetoa
  6837.     addq.w #1,a0
  6838.     sub.b #15,d3        ;iop-inex
  6839.     bra.b bitlp2
  6840. endfpsr:rts
  6841. mttxbit:lea mttxtxt(pc),a1
  6842.     bsr.w txttobuf        ;31-24
  6843.     move.l d2,d0
  6844.     rol.l #8,d0
  6845.     bsr.w bytetoa
  6846.     bsr.w txttobuf        ;23-16
  6847.     rol.l #8,d0
  6848.     bsr.w bytetoa
  6849.     addq.w #1,a0
  6850.     moveq #15,d3        ;e
  6851.     moveq #"E",d0
  6852.     bsr.w bitstat
  6853.     moveq #10,d3        ;ci
  6854. bitlp3:    bsr.w txttobuf
  6855.     bsr.w bitcacr
  6856.     cmp.b #7,d3        ;ci-rwm
  6857.     bne.b bitlp3
  6858.     bsr.w txttobuf
  6859.     moveq #%1110000,d0    ;fc
  6860.     and.l d2,d0
  6861.     lsr.b #4,d0
  6862.     bsr.w nibtoa
  6863.     bsr.w txttobuf
  6864.     moveq #%111,d0        ;fcm
  6865.     and.l d2,d0
  6866.     bra.w nibtoa
  6867. mtcbit:    lea mtctxt(pc),a1
  6868.     moveq #31,d3        ;e
  6869.     moveq #"E",d0
  6870.     bsr.w bitstat
  6871.     moveq #25,d3        ;sre
  6872.     bsr.w txttobuf
  6873.     bsr.w bitcacr
  6874.     bsr.w txttobuf        ;fcl
  6875.     bsr.w bitcacr
  6876.     bsr.w txttobuf        ;ps
  6877.     move.l d2,d0
  6878.     swap d0
  6879.     and.w #%01110000,d0
  6880.     lsr.w #2,d0
  6881.     move.b mmups+0(pc,d0.w),(a0)+
  6882.     move.b mmups+1(pc,d0.w),(a0)+
  6883.     move.b mmups+2(pc,d0.w),(a0)+
  6884.     move.b mmups+3(pc,d0.w),(a0)+
  6885.     moveq #5-1,d3        ;is,tia-tid
  6886.     move.l d2,d0
  6887.     swap d0            ;19-16:3-0
  6888. mtcb0:    bsr.w txttobuf
  6889.     bsr.w nibtod
  6890.     rol.l #4,d0        ;15-12
  6891.     dbf d3,mtcb0
  6892.     rts
  6893. mmups:    dc.l "256B","512B","1 KB","2 KB","4 KB","8 KB","16KB","32KB"
  6894.  
  6895. cacrtxt:dc.b "WA"!$80,"DBE"!$80,"CD"!$80,"CED"!$80
  6896.     dc.b "FD"!$80,"ED"!$80,"IBE"!$80
  6897. cacrtx2:dc.b "CI"!$80
  6898.     dc.b "CEI"!$80,"FI"!$80,"EI"!$80
  6899. cacrtx3:dc.b "DE"!$80,"IE"!$80
  6900. fpcrtxt:dc.b "BSUN"!$80,"SNAN"!$80,"OPERR"!$80,"OVFL"!$80,"UNFL"!$80
  6901.     dc.b "DZ"!$80,"INEX1"!$80,"INEX2"!$80
  6902. fpsrtxt:dc.b "N"!$80,"Z"!$80,"I"!$80,"NAN"!$80,"S"!$80
  6903.     dc.b "IOP"!$80,"OVFL"!$80,"UNFL"!$80,"DZ"!$80,"INEX"!$80
  6904. mttxtxt:dc.b "LAB="!$80," LAM="!$80,"CI"!$80,"R/W"!$80,"RWM"!$80
  6905.     dc.b "FC="!$80," FCM="!$80
  6906. mtctxt:    dc.b "SRE"!$80,"FCL"!$80,"PS="!$80," IS="!$80
  6907.     dc.b " TIA="!$80," TIB="!$80," TIC="!$80," TID="!$80
  6908.     even
  6909.  
  6910. rfpu:    lea fpuregs-base(a6),a2
  6911.     tst.b d3
  6912.     bne.w rfpuq
  6913. rf0:    move.l #"FP0:",d4
  6914.     moveq #8-1,d2        ;8 regs
  6915. rf1:    moveq #12/2-1,d1    ;80+16 bit
  6916.     lea linebuf+2-base(a6),a0
  6917.     move.l d4,(a0)+
  6918.     move.l a2,a3
  6919. rf2:    move.w (a2)+,d0
  6920.     bsr.w wordtoa
  6921.     dbf d1,rf2
  6922.     addq.w #2,a0
  6923.     bsr.w realtoa
  6924.     bsr.w rawline
  6925.     add.w #$100,d4
  6926.     dbf d2,rf1
  6927.  
  6928.     move.w #" F",(a0)+
  6929.     move.l #"PCR:",(a0)+
  6930.     move.l fpcr-base(a6),d2
  6931.     move.l d2,d0        ;fpcrbit
  6932.     bsr.w wordtoa        ;upper word=0
  6933.  
  6934.     addq.w #1,a0        ;even
  6935.     move.b #"P",(a0)+
  6936.     move.l #"REC=",(a0)+
  6937.  
  6938.     moveq #0,d0
  6939.     move.b d2,d0
  6940.     lsr.w #6,d0        ;prec
  6941.     move.b fprec(pc,d0.w),(a0)+
  6942.  
  6943.     addq.w #1,a0        ;even
  6944.     move.l #"RND=",(a0)+
  6945.  
  6946.     moveq #%00110000,d0
  6947.     and.w d2,d0
  6948.     lsr.w #4,d0        ;rnd
  6949.     move.b frnd(pc,d0.w),(a0)+    
  6950.  
  6951.     addq.w #1,a0
  6952.     
  6953.     bsr.w fpcrbit        ;exception enable
  6954.     bsr.w rawline
  6955.  
  6956.     move.w #" F",(a0)+
  6957.     move.l #"PSR:",(a0)+
  6958.     move.l fpsr-base(a6),d2
  6959.     move.l d2,d0
  6960.     bsr.w longtoa
  6961.  
  6962.     lea linebuf+24-base(a6),a0
  6963.     bsr.w fpcrbit        ;exception status
  6964.     bsr.w rawline
  6965.  
  6966.     move.w #"FP",(a0)+
  6967.     move.l #"IAR:",(a0)+
  6968.     move.l fpiar-base(a6),d0
  6969.     bsr.w longtoa
  6970.  
  6971.     addq.w #8,a0
  6972.     move.l fpsr-base(a6),d2
  6973.     bsr.w fpsrbit
  6974.     bsr.w rawline
  6975.  
  6976.     st d7
  6977. rfpuq:    rts
  6978. fprec:    dc.b "XSD?"
  6979. frnd:    dc.b "NZMP"
  6980.  
  6981. realtoa:tst.b fpu-base(a6)
  6982.     lea nofpu(pc),a1
  6983.     beq.b fpnan
  6984.     cmp.b #3,fpu-base(a6)    ;68040fpu ?
  6985.     beq.w endfp        ;no scientific notation
  6986.  
  6987.     dc.l fmove.x_a3.fp0
  6988.     lea bcdbuf-base(a6),a3
  6989.     dc.l fmove.p_fp0.a3
  6990.  
  6991.     moveq #" ",d0
  6992.     tst.b (a3)
  6993.     bpl.b fppos
  6994.     moveq #"-",d0
  6995. fppos:    move.b d0,(a0)+
  6996.     move.w (a3)+,d0
  6997.     ori.w #$8000,d0
  6998.     addq.w #1,d0
  6999.     bne.b fpok
  7000.     addq.w #2,a3
  7001.     lea nan(pc),a1
  7002.     btst #6,(a3)
  7003.     bne.b fpnan
  7004.     move.l (a3)+,d1
  7005.     lea infin(pc),a1
  7006.     or.l (a3),d1
  7007.     beq.b fpnan
  7008.     lea snan(pc),a1
  7009. fpnan:    bsr.w txttobuf
  7010.     bra.b endfp
  7011.     
  7012. fpok:    addq.w    #1,a3
  7013.     move.b (a3)+,d0
  7014.     bsr.w nibtoa
  7015.     move.b #".",(a0)+
  7016.     moveq #8-1,d1
  7017. fpman0:    move.b (a3),d0
  7018.     lsr.b #4,d0
  7019.     bsr.w nibtoa
  7020.     move.b (a3)+,d0
  7021.     bsr.w nibtoa
  7022.     dbf d1,fpman0
  7023.     move.b #"E",(a0)+
  7024.  
  7025.     lea bcdbuf-base(a6),a3
  7026.     moveq #"+",d0
  7027.     btst #6,(a3)
  7028.     beq.b fppos1
  7029.     moveq #"-",d0
  7030. fppos1:    move.b d0,(a0)+
  7031.  
  7032.     dc.l fmove_fpsr.d1
  7033.     moveq #0,d0
  7034.     btst #13,d1
  7035.     beq.b nooperr
  7036.     move.b 2(a3),d0
  7037.     lsr.b #4,d0
  7038. nooperr:bsr.w nibtoa
  7039.     move.b (a3)+,d0
  7040.     bsr.w nibtoa
  7041.     move.b (a3),d0
  7042.     lsr.b #4,d0
  7043.     bsr.w nibtoa
  7044.     move.b (a3),d0
  7045.     bsr.w nibtoa
  7046. endfp:    rts
  7047. nofpu:    dc.b "No FPU!"!$80
  7048. snan:    dc.b "S"
  7049. nan:    dc.b "NAN"!$80
  7050. infin:    dc.b "INFINITY"!$80
  7051.     even
  7052.  
  7053. settt0:    moveq #mmutt0-mmutt0,d0
  7054.     bra.b setmmu1
  7055. settt1:    moveq #mmutt1-mmutt0,d0
  7056.     bra.b setmmu1
  7057. settc:    moveq #mmutc-mmutt0,d0
  7058.     bra.b setmmu1
  7059. setmusr:moveq #mmusr-mmutt0,d0
  7060.     moveq #-1,d1    ;1 word para
  7061.     bra.b setmmu
  7062. setsrp:    moveq #mmusrp-mmutt0,d0
  7063.     bra.b setmmu2
  7064. setcrp:    moveq #mmucrp-mmutt0,d0
  7065.     bra.b setmmu2
  7066. setdrp:    cmp.b #1,mmu-base(a6)
  7067.     lea nmmutx1(pc),a1
  7068.     bne.b setmmue
  7069.     moveq #mmudrp-mmutt0,d0
  7070. ;    bra.b setmmu2
  7071. setmmu2:moveq #2,d1
  7072.     bra.b setmmu
  7073. setmmu1:moveq #1,d1    ;1 lw para
  7074. setmmu:    lea nmmutxt(pc),a1    ;no mmu
  7075.     tst.b mmu-base(a6)
  7076.     beq.b setmmue
  7077.     lea nmmutx2(pc),a1    ;not supported
  7078.     cmp.b #3,mmu-base(a6)
  7079.     beq.b setmmue
  7080.  
  7081.     movem.l para-base(a6),d4-d5
  7082.     lea mmutt0-base(a6),a0
  7083.     add.l d0,a0
  7084.     move.l d3,d0
  7085.  
  7086.     subq.l #1,d0    ;1 para?
  7087.     bne.b setmmn1
  7088.     cmp.l d1,d3
  7089.     bne.b setmmn0
  7090.     move.l d4,(a0)
  7091.     bra.b setmmu4
  7092. setmmn0:addq.l #1,d1
  7093.     bne.b setmmuq
  7094.     move.w d4,(a0)
  7095.     bra.b setmmu4
  7096. setmmn1:subq.l #1,d0    ;2 para?
  7097.     bne.b setmmuq
  7098.     cmp.l d1,d3
  7099.     bne.b setmmuq
  7100.     movem.l d4-d5,(a0)
  7101.  
  7102. setmmu4:bsr loadmmu
  7103.     bra.b rmmuout
  7104.  
  7105. setmmue:bsr msgout
  7106.     st d7
  7107. setmmuq:rts
  7108. rmmu:    tst.b d3
  7109.     bne.b setmmuq    ;rmmuq
  7110. rmmuout:bsr savemmu
  7111.  
  7112.     st d7
  7113.     tst.b mmu-base(a6)
  7114.     lea nmmutxt(pc),a1
  7115.     beq.w msgout
  7116.     cmp.b #3,mmu-base(a6)
  7117.     lea nmmutx2(pc),a1
  7118.     beq.w msgout
  7119.  
  7120.     lea mmutt0-base(a6),a2
  7121.     move.l #"TT0:",d4
  7122.     moveq #2-1,d5        ;2 regs
  7123. rm1:    lea linebuf+2-base(a6),a0
  7124.     move.l d4,(a0)+
  7125.     move.l (a2),d0
  7126.     bsr.w longtoa
  7127.     addq.w #2,a0
  7128.     move.l (a2)+,d2
  7129.     bsr.w mttxbit
  7130.     bsr.w rawline
  7131.     add.w #$100,d4
  7132.     dbf d5,rm1
  7133.  
  7134.     addq.w #2,a0
  7135.     move.l #" TC:",(a0)+
  7136.     move.l (a2),d0
  7137.     bsr.w longtoa
  7138.     addq.w #2,a0
  7139.     move.l (a2)+,d2
  7140.     bsr.w mtcbit
  7141.     bsr.w rawline
  7142.  
  7143.     cmp.b #1,mmu-base(a6)    ;68851
  7144.     bne.b no8513
  7145.     move.l a2,-(a7)
  7146.     lea mmudrp-base(a6),a2
  7147.     move.l #"DRP:",d0
  7148.     bsr.b doXrp
  7149.     move.l (a7)+,a2
  7150. no8513:    move.l #"SRP:",d0
  7151.     bsr.b doXrp
  7152.     move.l #"CRP:",d0
  7153.     bsr.b doXrp
  7154.  
  7155.     move.w #"MM",(a0)+
  7156.     move.l #"USR:",(a0)+
  7157.     move.w (a2),d2
  7158.     move.w d2,d0
  7159.     bsr.w wordtoa
  7160.     addq.w #6,a0
  7161.     moveq #15,d3
  7162.     moveq #"B",d0
  7163.     bsr.w bitstat        ;15
  7164.     moveq #"L",d0
  7165.     bsr.w bitstat        ;14
  7166.     moveq #"S",d0
  7167.     bsr.w bitstat        ;13
  7168.     subq.w #1,d3
  7169.     moveq #"W",d0
  7170.     bsr.w bitstat        ;11
  7171.     moveq #"I",d0
  7172.     bsr.w bitstat        ;10
  7173.     moveq #"M",d0
  7174.     bsr.w bitstat        ;9
  7175.     subq.w #2,d3
  7176.     moveq #"T",d0
  7177.     bsr.w bitstat        ;6
  7178.     bsr.w chr2buf
  7179.     dc.w "N="
  7180.     moveq #%111,d0    ;0-7
  7181.     and.w d2,d0
  7182.     bsr.w nibtoa
  7183.     bsr.w rawline
  7184.  
  7185. rmmuq:    rts    
  7186. doXrp:    addq.w #2,a0
  7187.     move.l d0,(a0)+
  7188.     move.l (a2),d0
  7189.     bsr.w longtoa
  7190.     addq.w #1,a0
  7191.     move.l 4(a2),d0
  7192.     bsr.w longtoa
  7193.     addq.w #1,a0
  7194.  
  7195.     move.w #"L/",(a0)+    ;even
  7196.     moveq #"U",d0
  7197.     moveq #15,d3
  7198.     move.w (a2)+,d2
  7199.     bsr.w bitstat
  7200.     bsr.w chr4buf
  7201.     dc.l "LMT="
  7202.     move.w #$7fff,d0
  7203.     and.w d2,d0
  7204.     bsr.w wordtoa
  7205.     bsr.w chr4buf
  7206.     dc.l " DT="
  7207.     moveq #%11,d0
  7208.     and.w (a2)+,d0
  7209.     bsr.w nibtoa    
  7210.     bsr.w chr4buf
  7211.     dc.l " TA="
  7212.     moveq #-4,d0        ;%..11100
  7213.     and.l (a2)+,d0
  7214.     bsr.w longtoa
  7215.     bra.w rawline
  7216.  
  7217. mmuon:    lea mmuonh(pc),a0
  7218.     bra.b mmuon0
  7219. mmuoff:    lea mmuoffh(pc),a0
  7220. mmuon0:    st d7
  7221.     tst.b mmu-base(a6)
  7222.     lea nmmutxt(pc),a1
  7223.     beq.w msgout
  7224.     cmp.b #3,mmu-base(a6)
  7225.     lea nmmutx2(pc),a1
  7226.     beq.w msgout
  7227.     bra.w mmujob
  7228.  
  7229. ontxt:    dc.b "on "!$80
  7230. offtxt:    dc.b "off"!$80
  7231. chips:    dc.b "1MBit*1"!$80,0    ;a3000/a4000 onboard chipsize
  7232.     dc.b "4MBit*4"!$80,0
  7233.     dc.b "256 K*4"!$80,0
  7234.     dc.b "1MBit*4"!$80,0
  7235. refresh:dc.b "123o"        ;a3000/a4000 refresh rates
  7236.     dc.b "538f"
  7237.     dc.b "480f"
  7238. ramsey:    lea linebuf+1-base(a6),a0
  7239.     lea a3info(pc),a1
  7240.     bsr.b rtxtbuf
  7241.     move.b $de0043,d0    ;version
  7242.     bsr bytetoa_
  7243.     move.b $de0003,d0
  7244.     moveq #0,d1
  7245.     lea linebuf+1+(a3stc-a3info)-base(a6),a0
  7246.     bsr.b onoff        ;bit0
  7247.     addq.w #a3burst-a3stc-3,a0
  7248.     bsr.b onoff        ;bit1
  7249.     addq.w #a3bwrap-a3burst-3,a0
  7250.     bsr.b onoff        ;bit2
  7251.     moveq #%00011000,d1    ;bit3,4
  7252.     and.w d0,d1
  7253.     addq.w #a3chips-a3bwrap-3,a0
  7254.     lea chips(pc,d1.w),a1
  7255.     bsr.b rtxtbuf
  7256.     moveq #%01100000,d1
  7257.     and.w d0,d1
  7258.     rol.b #3,d1
  7259.     lea a3refr-a3chips-7(a0),a0
  7260.     move.b refresh+0(pc,d1.w),(a0)+
  7261.     move.b refresh+4(pc,d1.w),(a0)+
  7262.     move.b refresh+8(pc,d1.w),(a0)+
  7263.  
  7264. rams0:    st d7
  7265.     bra rawline
  7266. onoff:    btst d1,d0
  7267. doonoff:lea ontxt(pc),a1
  7268.     bne.b ison
  7269.     addq.w #offtxt-ontxt,a1
  7270. ison:    addq.b #1,d1
  7271. rtxtbuf:bra.w txttobuf
  7272.  
  7273. gary:    lea $de0000,a4
  7274.     lea linebuf+1-base(a6),a0
  7275.     lea a3info2(pc),a1
  7276.     bsr.b rtxtbuf
  7277.     tst.b 1(a4)    ;timeout disable
  7278.     bmi.b timdis
  7279.     addq.w #a3dsack-a3disab,a1
  7280.     tst.b (a4)    ;timeout control
  7281.     bpl.b timdis
  7282.     addq.w #a3berr-a3dsack,a1
  7283. timdis:    bsr.b rtxtbuf
  7284.     lea a3kbrst(pc),a1
  7285.     bsr.b rtxtbuf
  7286.     moveq #"n",d0
  7287.     tst.b $1001(a4)    ;kb reset enable
  7288.     bpl.b kbrston
  7289.     moveq #"f",d0
  7290.     move.b d0,(a0)+
  7291. kbrston:move.b d0,(a0)+
  7292.     bsr.b rtxtbuf
  7293.     lea $1002(a4),a3    ;garyID
  7294.     sf (a3)            ;init ID mode
  7295.     moveq #8-1,d1
  7296. garyid1:tst.b (a3)
  7297.     bpl.b garyid0
  7298.     addq.b #1,d0
  7299. garyid0:add.b d0,d0
  7300.     dbf d1,garyid1
  7301.     bsr bytetoa_
  7302. ;    bsr.b rtxtbuf
  7303. ;    moveq #%100,d0
  7304. ;    lea $dd0004,a4        ;DMAC
  7305. ;    move.l d0,(a4)
  7306. ;    and.l (a4),d0
  7307. ;    bne.b dmacold
  7308. ;    subq.w #3,a0
  7309. ;    bsr.b rtxtbuf        ;new
  7310. ;dmacold:
  7311.     bra.w rams0
  7312.  
  7313. setkey:    cmp.b #1,d3
  7314.     bhi.w setkq
  7315.     tst.b d3
  7316.     beq.b setk0
  7317.     move.l para-base(a6),d0
  7318.     lea $f1.w,a0
  7319.     sub.l a0,d0
  7320.     bmi.w setkq
  7321.     lea $f10-$f1.w,a0
  7322.     cmp.l a0,d0
  7323.     bne.b setk1
  7324.     moveq #9,d0
  7325. setk1:    moveq #9,d1
  7326.     cmp.l d1,d0
  7327.     bhi.w setkq
  7328.  
  7329.     lea 2(a5),a2
  7330.     moveq #xchars-2-1,d1
  7331. setk8:    cmp.b #34,(a2)
  7332.     beq.b setk9
  7333.     cmp.b #39,(a2)
  7334.     beq.b setk9
  7335.     addq.w #1,a2
  7336.     dbf d1,setk8
  7337.     bra.b setkq
  7338. setk9:    move.b (a2)+,d4
  7339.  
  7340.     lea fkeybuf-base(a6),a0
  7341.     mulu #fkeylen,d0
  7342.     lea (a0,d0.w),a0
  7343.     moveq #fkeylen-1,d1
  7344. setk2:    cmp.b (a2),d4
  7345.     beq.b setk3
  7346.     move.b (a2)+,(a0)+
  7347.     dbf d1,setk2
  7348. setk3:    tst.w d1
  7349.     bmi.b setk0
  7350.     sf (a0)
  7351. setk0:    lea fkeybuf-base(a6),a2
  7352.     moveq #10-1,d2
  7353. setk6:    move.l a2,a1
  7354.     lea linebuf+1-base(a6),a0
  7355.     move.b #"F",(a0)+
  7356.     moveq #10,d0
  7357.     sub.b d2,d0
  7358.     bsr.w nibtod
  7359.     lea linebuf+5-base(a6),a0
  7360.     moveq #39,d0
  7361.     move.b d0,(a0)+
  7362.     moveq #fkeylen-1,d3
  7363. setk4:    move.b (a1)+,(a0)+
  7364.     dbeq d3,setk4
  7365.     bne.b setk7
  7366.     subq.w #1,a0
  7367. setk7:    move.b d0,(a0)
  7368.     lea fkeylen(a2),a2
  7369.     bsr.w rawline
  7370.     dbf d2,setk6
  7371.     st d7
  7372. setkq:    rts
  7373. color:    subq.b #2,d3
  7374.     bne.b colorq
  7375.     movem.l para-base(a6),d0-d1
  7376.     movem.w d0-d1,rgb0-base(a6)
  7377.     movem.w d0-d1,$dff180
  7378.  
  7379.     cmp.b #4,modeflg-base(a6)
  7380.     bne.b colorok
  7381.     bsr.w mapcol
  7382.     move.l d3,$dff180
  7383.     move.l d2,$dff188
  7384.  
  7385. colorok:st d7
  7386. colorq:    rts
  7387.  
  7388. print:    lea linebuf+1-base(a6),a0
  7389.     lea prttxt(pc),a1
  7390.     bsr.w txttobuf
  7391.     not.b prtflag-base(a6)    ;toggle printer
  7392.     bra.b verif0
  7393.  
  7394. verify:    lea linebuf+1-base(a6),a0
  7395.     lea vfytxt(pc),a1
  7396.     bsr.w txttobuf
  7397.     bchg #4,langflg-base(a6)    ;toggle verify
  7398. verif0:    bsr.w doonoff
  7399.     bsr.w rawline
  7400.     st d7
  7401.     rts
  7402.  
  7403.  
  7404. setmap:    bsr.b swapmap
  7405.     lea linebuf+1-base(a6),a0
  7406.     lea smaptxt(pc),a1
  7407.     bsr.w txttobuf
  7408.     tst.b keytab+$90-base(a6)    ;german keymap?
  7409.     beq.b isusa
  7410.     subq.w #3,a0
  7411.     bsr.w txttobuf
  7412. isusa:    bsr.w rawline
  7413.     st d7
  7414.     rts
  7415.  
  7416. swapmap:lea keytab+$0a-base(a6),a0        ;swaps german and usa keymap
  7417.     eor.l #"0ß'\"~"0-=\",(a0)
  7418.     eor.w #"tz"~"ty",$14-$0a(a0)
  7419.     eor.w #"ü+"~"[]",$1a-$0a(a0)
  7420.     eor.l #"löä#"~["l;'"*256],$28-$0a(a0)
  7421.     eor.w #"<y"~"z",$30-$0a(a0)    
  7422.     eor.w #"- "~"/ ",$3a-$0a(a0)
  7423.  
  7424.     eor.w #34*256+"§"~"@#",$62-$0a(a0)
  7425.     eor.l #"&/()"~"^&*(",$66-$0a(a0)
  7426.     eor.l #"=?`|"~")_+|",$6a-$0a(a0)
  7427.     eor.w #"TZ"~"TY",$74-$0a(a0)
  7428.     eor.w #"Ü*"~"{}",$7a-$0a(a0)
  7429.     eor.l #"LÖÄ^"~['L:"'*256],$88-$0a(a0)    ;$00ece65e
  7430.     eor.w #">Y"~"Z",$90-$0a(a0)
  7431.     eor.l #";:_ "~"<>? ",$98-$0a(a0)
  7432.     rts
  7433.  
  7434. cls:    st d7
  7435.     bra.w clrhome
  7436.  
  7437. bplist:    lea brkpadr-base(a6),a2
  7438.     moveq #brkpnum-1,d2
  7439. bplst0:    move.l (a2)+,d0
  7440.     beq.b bplst1
  7441.     move.l d0,a5
  7442.     bsr.w disasm
  7443.     bsr.w rawline
  7444. bplst1:    dbf d2,bplst0
  7445.     st d7
  7446. bplstq:    rts
  7447. bpset:    moveq #0,d2
  7448.     subq.b #1,d3
  7449.     bne.w bpsetq
  7450.     move.l para-base(a6),d3
  7451.     beq.w bpsetq
  7452.     btst d2,d3    ;even?
  7453.     bne.b bpsetq
  7454.     lea brkpadr-base(a6),a2
  7455.     moveq #brkpnum-1,d1
  7456. bpset0:    tst.l (a2)
  7457.     bne.b bpset2
  7458.     move.l a2,d2
  7459. bpset2:    cmp.l (a2)+,d3
  7460.     dbeq d1,bpset0
  7461.     lea bpextxt(pc),a3
  7462.     beq.b bpset1
  7463.     lea bpfltxt(pc),a3
  7464.     tst.l d2
  7465.     beq.b bpset1
  7466.     lea mmuoffb(pc),a0
  7467.     bsr.w mmujob        ;->d0:oldmmutc
  7468.     move.l d0,-(a7)
  7469.     move.l d3,a0
  7470.     move.l (a0),d1
  7471.     move.l #"BeEr",(a0)
  7472.     bsr.w pushcache
  7473.     move.l (a0),a1
  7474.     move.l d1,(a0)
  7475.     lea bpnoram(pc),a3
  7476.     cmp.l #"BeEr",a1
  7477.     bne.b bpset3
  7478.     move.l d2,a2    
  7479.     move.l d3,(a2)
  7480.     lea bpstxt(pc),a3
  7481. bpset3:    move.l (a7)+,d0
  7482.     lea mmurest(pc),a0    ;d0:mmutc to use
  7483.     bsr.w mmujob
  7484. bpset1:    lea linebuf+1-base(a6),a0
  7485.     lea brktxt(pc),a1
  7486.     bsr.w txttobuf
  7487.     move.l a3,a1
  7488.     bsr.w txttobuf
  7489.     bsr.w rawline
  7490.     st d7
  7491. bpsetq:    rts
  7492. bpclr:    moveq #0,d2
  7493.     subq.b #1,d3
  7494.     bne.b bpsetq
  7495.     lea brkpadr-base(a6),a2
  7496.     moveq #brkpnum-1,d1
  7497.     move.l para-base(a6),d0
  7498.     beq.b bpclr1
  7499.     btst d2,d0    ;even?
  7500.     bne.b bpsetq
  7501. bpclr0:    cmp.l (a2)+,d0
  7502.     dbeq d1,bpclr0
  7503.     lea bpnftxt(pc),a3
  7504.     bne.b bpset1
  7505.     clr.l -(a2)
  7506.     lea bprmtxt(pc),a3
  7507.     bra.b bpset1
  7508. bpclr1:    clr.l (a2)+        ;clear all bp
  7509.     dbf d1,bpclr1
  7510.     lea bpbctxt(pc),a3
  7511.     bra.b bpset1
  7512.  
  7513. spc:    moveq #0,d3
  7514.     bsr.w csup
  7515.     move.b lastcmd-base(a6),d0
  7516.     cmp.b #"a",d0            ;these can be repeated
  7517.     beq.w a
  7518.     cmp.b #"m",d0
  7519.     beq.w m
  7520.     cmp.b #"d",d0
  7521.     beq.w d
  7522.     cmp.b #"u",d0
  7523.     beq.w d6502
  7524.     cmp.b #"V",d0
  7525.     beq.w copper
  7526.     
  7527.     cmp.w #"bi",lastcmd-base(a6)
  7528.     bne.b nobind
  7529.     move.w lastcmd+2-base(a6),d0
  7530.     
  7531.     cmp.w #"nw",d0
  7532.     beq.b binw
  7533.     cmp.w #"nl",d0
  7534.     beq.b binl
  7535.     cmp.w #"nt",d0
  7536.     beq.b bint
  7537.     cmp.w #"nq",d0
  7538.     beq.b binq
  7539.     sf d0
  7540.     cmp.w #"n"<<8,d0
  7541.     beq.b binb
  7542.  
  7543. nobind:    bsr.w csdown
  7544.     st d7
  7545.     rts
  7546.  
  7547. binq:    moveq #"{",d2
  7548.     bra.b binit
  7549. bint:    moveq #"}",d2
  7550.     bra.b binit
  7551. binl:    moveq #"[",d2
  7552.     bra.b binit
  7553. binw:    moveq #"]",d2
  7554.     bra.b binit
  7555. binb:    moveq #"|",d2
  7556. binit:    cmp.b #2,d3
  7557.     bgt.l bdq
  7558.  
  7559.     bsr.b binsize
  7560.     moveq #16-1,d5
  7561. bd1:    bsr.b bincore
  7562.  
  7563.     bsr.w stopit
  7564.     beq.b bd3
  7565.  
  7566.     cmp.b #2,d3
  7567.     bne.b bd2
  7568.     move.l para-base(a6),a0
  7569.     cmp.l para+4-base(a6),a0
  7570.     bcs.w bd1
  7571.     bra.b bd3
  7572.  
  7573. bd2:    dbf d5,bd1
  7574. bd3:    st d7
  7575. bdq:    rts
  7576.  
  7577. binsize:moveq #8,d1
  7578.     cmp.b #"{",d2
  7579.     beq.b binok
  7580.     moveq #6,d1
  7581.     cmp.b #"}",d2
  7582.     beq.b binok
  7583.     moveq #4,d1
  7584.     cmp.b #"[",d2
  7585.     beq.b binok
  7586.     moveq #2,d1
  7587.     cmp.b #"]",d2
  7588.     beq.b binok
  7589.     moveq #1,d1
  7590.     cmp.b #"|",d2
  7591.     beq.b binok
  7592.     moveq #0,d1
  7593. binok:    tst.l d1
  7594.     rts
  7595.  
  7596. bincore:movem.l d1-d4,-(a7)
  7597.     lea linebuf-base(a6),a0
  7598.     move.b #">",(a0)+
  7599.     move.b d2,(a0)+
  7600.  
  7601.     move.l para-base(a6),d0
  7602.     bsr longtoa
  7603.     addq.w #1,a0
  7604.  
  7605.     move.l para-base(a6),a1
  7606.     move.w d1,d4
  7607.     subq.w #1,d4
  7608. bd4:    move.b (a1)+,d3
  7609.     bsr bytetob
  7610.     subq.w #1,a0
  7611.     dbf d4,bd4
  7612.  
  7613.     move.l a1,para-base(a6)
  7614.     bsr rawline
  7615.     movem.l (a7)+,d1-d4
  7616.     rts
  7617.  
  7618. edbinq:    moveq #8+1,d6
  7619.     bra.b edbin
  7620. edbint:    moveq #6+1,d6
  7621.     bra.b edbin
  7622. edbinl:    moveq #4+1,d6
  7623.     bra.b edbin
  7624. edbinw:    moveq #2+1,d6
  7625.     bra.b edbin
  7626. edbinb:    moveq #1+1,d6
  7627. edbin:    cmp.l d3,d6
  7628.     bne.b edbq
  7629.  
  7630.     move.b 1(a5),d2        ;bincore
  7631.     subq.w #2,d6
  7632.  
  7633.     move.w d6,d0
  7634.     lea para+4-base(a6),a0
  7635. edb1:    move.l (a0)+,d1
  7636.     and.l #$eeeeeeee,d1
  7637.     bne.b edbq
  7638.     dbf d0,edb1
  7639.  
  7640.     move.w d6,d0
  7641.     lea para-base(a6),a0
  7642.     move.l (a0)+,a1
  7643. edb0:    move.l (a0)+,d3
  7644.     moveq #8-1,d5
  7645. edb2:    add.b d1,d1
  7646.     rol.l #4,d3
  7647.     btst #0,d3
  7648.     beq.b edb3
  7649.     addq.b #1,d1
  7650. edb3:    dbf d5,edb2    
  7651.     move.b d1,(a1)+
  7652.     dbf d0,edb0    
  7653.  
  7654.     bsr.w csup
  7655.     move.w d6,d1
  7656.     addq.w #1,d1
  7657.     bsr.w bincore
  7658.  
  7659.     st d7
  7660. edbq:    rts
  7661.  
  7662. m:    cmp.b #2,d3
  7663.     bgt.l mq
  7664.  
  7665.     moveq #16-1,d5
  7666. m1:    bsr.b mcore
  7667.     bsr.w stopit
  7668.     beq.b m3
  7669.  
  7670.     cmp.b #2,d3
  7671.     bne.b m2
  7672.     move.l para-base(a6),a0
  7673.     cmp.l para+4-base(a6),a0
  7674.     bcs.w m1
  7675.     bra.b m3
  7676.  
  7677. m2:    dbf d5,m1
  7678. m3:    st d7
  7679. mq:    rts
  7680.  
  7681. mcore:    lea linebuf-base(a6),a0
  7682.     move.w #">:",(a0)+
  7683.     move.l para-base(a6),d0
  7684.     bsr longtoa
  7685.     addq.w #1,a0
  7686.     moveq #8-1,d2
  7687.     move.l para-base(a6),a1
  7688. m0:    move.b #" ",(a0)+
  7689.     move.b (a1)+,d0
  7690.     lsl.w #8,d0
  7691.     move.b (a1)+,d0
  7692.     bsr wordtoa
  7693.     dbf d2,m0
  7694.     addq.w #2,a0
  7695.     move.b #"'",(a0)+
  7696.     move.l para-base(a6),a1
  7697.     moveq #".",d2
  7698.     moveq #16-1,d1
  7699. m4:    move.b (a1)+,d0
  7700.     bmi.b m5
  7701.     cmp.b #" ",d0
  7702.     blt.b m5
  7703.     move.b d0,(a0)+        ;$20-$7f
  7704.     dbf d1,m4
  7705.     bra.b m6
  7706. m5:    move.b d2,(a0)+        ;$00-$1f,$80-$ff
  7707.     dbf d1,m4
  7708. m6:    move.b #"'",(a0)+
  7709.     moveq #$10,d0
  7710.     add.l d0,para-base(a6)
  7711.     bra rawline
  7712.  
  7713. mm:    cmp.b #9,d3
  7714.     bne.w mm1
  7715.     lea para-base(a6),a0
  7716.     move.l (a0),a1
  7717.     cmp.b #54,d6        ;asc edit ?
  7718.     bge.b mm2
  7719.  
  7720.     addq.w #6,a0
  7721.     moveq #8-1,d0
  7722. mm0:    move.b (a0)+,(a1)+
  7723.     move.b (a0)+,(a1)+
  7724.     addq.w #2,a0
  7725.     dbf d0,mm0
  7726. mm1:    clr.w d5
  7727.     clr.b d3
  7728.     bsr.w csup
  7729.     bra.w m1
  7730. mm2:    moveq #16-1,d0
  7731.     moveq #54,d6        ;beg asc edit
  7732. mm3:    move.b (a5,d6.w),d1
  7733.     cmp.b #".",d1        ;skip it
  7734.     beq.b mm4
  7735.     move.b d1,(a1)
  7736. mm4:    addq.w #1,d6
  7737.     addq.w #1,a1
  7738.     dbf d0,mm3
  7739.     bra.b mm1
  7740.  
  7741. a:    cmp.b #2,d3
  7742.     bgt.l adq
  7743.  
  7744.     moveq #16-1,d5
  7745. ad1:    bsr.b acore
  7746.     bsr.w stopit
  7747.     beq.b ad3
  7748.  
  7749.     cmp.b #2,d3
  7750.     bne.b ad2
  7751.     move.l para-base(a6),a0
  7752.     cmp.l para+4-base(a6),a0
  7753.     bcs.w ad1
  7754.     bra.b ad3
  7755. ad2:    dbf d5,ad1
  7756. ad3:    st d7
  7757. adq:    rts
  7758. acore:    lea linebuf-base(a6),a0
  7759.     move.w #">;",(a0)+
  7760.     move.l para-base(a6),d0
  7761.     bsr longtoa
  7762.     addq.w #2,a0
  7763.     move.b #"'",(a0)+
  7764.     move.l para-base(a6),a1
  7765.     moveq #".",d2
  7766.     moveq #64-1,d1
  7767. ad4:    move.b (a1)+,d0
  7768.     bmi.b ada0
  7769.     cmp.b #" ",d0
  7770.     blt.b ada0
  7771.     move.b d0,(a0)+        ;$20-$7f
  7772.     dbf d1,ad4
  7773.     bra.b ada1
  7774. ada0:    move.b d2,(a0)+        ;$00-$1f,$80-$ff
  7775.     dbf d1,ad4
  7776. ada1:    move.b #"'",(a0)+
  7777.     moveq #$40,d0
  7778.     add.l d0,para-base(a6)
  7779.     bra rawline
  7780.  
  7781. aa:    cmp.b #1,d3
  7782.     bne.b aaq
  7783.     cmp.b #"'",12(a5)
  7784.     bne.b aaq
  7785.  
  7786.     move.l para-base(a6),a1
  7787.     moveq #64-1,d0
  7788.     moveq #13,d6        ;beg asc edit
  7789. aa0:    move.b (a5,d6.w),d1
  7790.     cmp.b #".",d1        ;skip it
  7791.     beq.b aa1
  7792.     move.b d1,(a1)
  7793. aa1:    addq.w #1,d6
  7794.     addq.w #1,a1
  7795.     dbf d0,aa0
  7796.  
  7797.     st d7
  7798. aaq:    rts
  7799.  
  7800.  
  7801. xclr:    move.w #$7fff,$dff096    ;no dma
  7802.     move #$2700,sr        ;no int
  7803.     moveq #-1,d0        ;fill value
  7804.     sub.l a4,a4        ;noguru&clrmem
  7805.     move.l himem-base(a6),a0    ;end of chipmem
  7806.     lea xclr-base(a6),a1
  7807.     cmp.l a0,a1        ;prog within fillarea?
  7808.     bhi.b fillchp
  7809.     lea endclr(pc),a3
  7810. fillch2:move.l d0,(a3)+
  7811.     cmp.l a3,a0
  7812.     bhi.b fillch2
  7813.  
  7814.     move.l a1,a0
  7815. fillchp:move.l d0,(a4)+        
  7816.     cmpa.l a4,a0
  7817.     bhi.b fillchp
  7818.     
  7819.     nop        ;longword aligned
  7820.     
  7821. doreset:lea $40000,a7    ;code in ramcard
  7822.     lea $fc00fe,a4    ;kick 1.2/1.3 resetentry
  7823.     cmp.l #$80000,$ffffec
  7824.     bne.b onelong
  7825.     lea $400.w,a7
  7826.     lea $f80000,a0
  7827.     move.l a0,a4
  7828.     moveq #-1,d1
  7829.     moveq #1,d2
  7830.     moveq #0,d5    
  7831. dores0:    add.l (a0)+,d5
  7832.     bcc.b dores1
  7833.     addq.l #1,d5
  7834. dores1:    dbf d1,dores0
  7835.     dbf d2,dores0
  7836. dores2:    cmp.l #$4ee90002,(a4)+    ;jmp 2(a1)
  7837.     beq.b onelong
  7838.     subq.w #2,a4
  7839.     bra.b dores2
  7840.             ;lea $f8010c,a4    ;kick 2.0 resetentry
  7841. onelong:reset        ;longword aligned if LoadSeg, module: don't care
  7842.     jmp (a4)    ;reset, no moduletest
  7843. endclr:
  7844.  
  7845. bpl:    moveq #0,d0
  7846.     cmp.b #1,d3
  7847.     bhi.w bplq
  7848.     bne.b bpl1
  7849.     move.l para-base(a6),d0
  7850. bpl1:    move.l d0,msycnt-base(a6)
  7851.     move.w #$0020,$dff096
  7852.     moveq #0,d0
  7853.     move.l d0,$dff144    
  7854. bpl0:
  7855.     lea linebuf+1-base(a6),a0
  7856.     lea bpltxt(pc),a1
  7857.     bsr.w txttobuf
  7858.  
  7859. bpl9:    move.l msycnt-base(a6),d0
  7860.     bclr #0,d0
  7861.     move.l d0,a4
  7862.     moveq #0,d1
  7863.     move.b rows-base(a6),d1
  7864.     mulu #xchars*8,d1
  7865. bpl3:    lea $c80000,a1
  7866.     sub.l d1,a1
  7867.     cmp.l a1,d0
  7868.     bls.b bpl8
  7869.     lea $f00000,a5
  7870.     cmp.l a5,d0
  7871.     bcc.b bpl8
  7872.     move.l a1,d2
  7873.     add.l a5,d2
  7874.     lsr.l #1,d2
  7875.     cmp.l d2,d0
  7876.     bls.b bpl14        ;lower or upper memblock?
  7877.     move.l a5,a1
  7878. bpl14:    move.l a1,msycnt-base(a6)
  7879.     bra.b bpl9
  7880.  
  7881. bpl8:    add.l d0,d1
  7882.     bsr.w twolong_
  7883.  
  7884.     move.l scradr-base(a6),a5
  7885.     lea font-[32*8]-base(a6),a1    ;start=spc
  7886.     moveq #8-1,d2
  7887. bpl11:    moveq #25-1,d1
  7888.     lea linebuf-base(a6),a0
  7889.     lea [80-25](a5),a5
  7890. bpl10:    moveq #0,d0
  7891.     move.b (a0)+,d0
  7892.     lsl.w #3,d0
  7893.     move.b (a1,d0.w),(a5)+
  7894.     dbf d1,bpl10    
  7895.     addq.w #1,a1
  7896.     dbf d2,bpl11
  7897.  
  7898.     move.l scradr-base(a6),a5
  7899.     moveq #8-1,d2
  7900. bpl7:    moveq #80-25-1,d1
  7901.     moveq #0,d0
  7902.     move.b rowsm1-base(a6),d0
  7903.     lsl.w #4,d0
  7904.     subq.w #1,d0
  7905. bpl6:    move.b (a4)+,(a5)+
  7906.     dbf d1,bpl6
  7907.     lea 25(a4),a4
  7908.     lea 25(a5),a5
  7909.     dbf d2,bpl7
  7910.  
  7911. bpl2:    movem.l (a4)+,d1-d7/a0-a2
  7912.     movem.l d1-d7/a0-a2,(a5)
  7913.     lea 40(a5),a5
  7914.     dbf d0,bpl2
  7915.     cmp.b #$1b,ascii-base(a6)
  7916.     bne.w bpl0
  7917.  
  7918.     bsr.w clrhome
  7919.     st d7
  7920. bplq:    rts
  7921.  
  7922. work:    cmp.b #1,d3    ;we change the workspace, restore the old
  7923.     bhi.w woq
  7924.     tst.b d3
  7925.     beq.w wo0
  7926.     move.l para-base(a6),d0
  7927.     lea $100.w,a0
  7928.     cmp.l a0,d0
  7929.     bcs.w woq
  7930.     move.l himem-base(a6),d1
  7931.     sub.l wrksize-base(a6),d1
  7932.     cmp.l d1,d0
  7933.     bhi.w woq
  7934.     btst #0,d0
  7935.     bne.w woq
  7936.  
  7937.     move.w #$0180,$dff096        ;cop/bpl off
  7938.     move.w #$4000,$dff09a        ;ughh, celtic frost
  7939.     tst.l bufadr-base(a6)
  7940.     beq.b calchip
  7941.  
  7942.     move.l scradr-base(a6),a1        ;old
  7943.     move.l d0,a2            ;new
  7944.     move.l bufadr-base(a6),a3        ;buf
  7945.     lea $dff006,a4
  7946.     lea $017a(a4),a5    ;$dff180
  7947.     move.l wrksize-base(a6),d2
  7948.     cmp.l a1,a2
  7949.     beq.b calchip
  7950.     bhi.b cpyrev        ;we go up or down?
  7951. swapup:    move.b (a2)+,d1        ;new
  7952.     move.b (a3),(a1)+    ;buf to old
  7953.     move.b d1,(a3)+        ;new to buf
  7954.     move.b (a4),(a5)
  7955.     subq.l #1,d2
  7956.     bne.b swapup
  7957.     bra.b calchip
  7958.  
  7959. cpyrev:    add.l d2,a1        ;old
  7960.     add.l d2,a2        ;new
  7961.     add.l d2,a3        ;buf
  7962. swapdwn:move.b -(a2),d1        ;new
  7963.     move.b -(a3),-(a1)    ;buf to old
  7964.     move.b d1,(a3)        ;new to buf
  7965.     move.b (a4),(a5)
  7966.     subq.l #1,d2
  7967.     bne.b swapdwn
  7968.  
  7969. calchip:move.l d0,a0
  7970.     move.l a0,scradr-base(a6)
  7971.     add.l scrsize-base(a6),a0
  7972.     move.l a0,dskadr-base(a6)
  7973.     lea dsksize(a0),a0
  7974.     move.l a0,spradr-base(a6)
  7975.     lea sprsize(a0),a0
  7976.     move.l a0,copadr-base(a6)
  7977.     sf prtflag-base(a6)    ;printer off
  7978.     bsr.w rawline
  7979.     bsr.w cursoff
  7980.     bsr.w clrscr
  7981.     sf col-base(a6)
  7982.     tst.b pic-base(a6)
  7983.     beq.b nopic
  7984.     sf pic-base(a6)
  7985.     lea dostrkbuf-base(a6),a1    ;temp picsource
  7986.     move.l scradr-base(a6),a2
  7987.     lea 20(a2),a2        ;center pic
  7988.     moveq #64-1,d0        ;hight
  7989. copylog:moveq #40-1,d1        ;width
  7990. copylin:move.b (a1)+,(a2)+
  7991.     dbf d1,copylin
  7992.     lea 40(a2),a2        ;modulo
  7993.     dbf d0,copylog
  7994.     move.b #9,row-base(a6)
  7995.  
  7996.     tst.b keytab+$90-base(a6)    ;0:american
  7997.     bne.b noswap
  7998.     bsr.w swapmap
  7999. noswap:    btst #0,langflg-base(a6)        ;0:german
  8000.     beq.b keygerm
  8001.     bsr.w swapmap
  8002. keygerm:
  8003.  
  8004. nopic:
  8005.     lea linebuf+1-base(a6),a0
  8006.     lea initxt(pc),a1
  8007.     lea txttobuf(pc),a3
  8008.     jsr (a3)
  8009.     moveq #"0",d0
  8010.     add.b cpu-base(a6),d0
  8011.     move.b d0,(a0)+
  8012.     jsr (a3)
  8013.     move.l a1,-(a7)
  8014.     lea mmutxt(pc),a1
  8015.     move.b mmu-base(a6),d0
  8016.     bsr tsstate
  8017.     move.b #",",(a0)+
  8018.     lea fputxt(pc),a1
  8019.     move.b fpu-base(a6),d0
  8020.     bsr tsstate
  8021.     move.b #",",(a0)+
  8022.     lea chiptxt-4(pc),a1
  8023.     move.w himem-base(a6),d0    ;$8,$10,$18,$20
  8024.     lsr.w #1,d0
  8025.     add.w d0,a1
  8026.     jsr (a3)
  8027.     move.l (a7)+,a1
  8028.     jsr (a3)
  8029.     move.l a1,-(a7)
  8030.     lea muttxt(pc),a1
  8031.     tst.b frzflag-base(a6)
  8032.     beq.b mutil1
  8033.     lea frztxt(pc),a1
  8034. mutil1:    jsr (a3)        ;xx mode
  8035.     move.l (a7)+,a1
  8036.     jsr (a3)
  8037.     bsr rawline
  8038.  
  8039.     bsr.w wo0
  8040.  
  8041.     move.b #3,drvbit-base(a6)
  8042.     bsr.w drvinit        ;set df0:
  8043.  
  8044.     bsr csdown
  8045.     bra.w warm
  8046.  
  8047. wo0:    lea linebuf+1-base(a6),a0
  8048.     lea worktxt(pc),a1
  8049.     bsr.w txttobuf
  8050.     lea abstxt(pc),a1    ;Workspace(ABS)
  8051.     tst.b abswork-base(a6)
  8052.     bne.b wo1
  8053.     addq.w #systxt-abstxt,a1;Workspace(SYS)
  8054. wo1:    bsr.w txttobuf
  8055.     move.l scradr-base(a6),d0
  8056.     move.l d0,d1
  8057.     add.l wrksize-base(a6),d1
  8058.     bsr.w twoadr_        ;chipmem use 24 bit
  8059.  
  8060.     lea codetxt(pc),a1
  8061.     bsr.w txttobuf
  8062.     lea run(pc),a1
  8063.     move.l a1,d0
  8064.     lea progend-$4000-base(a6),a1
  8065.     lea $4000(a1),a1
  8066.     move.l a1,d1
  8067.     bsr.w twolong_
  8068.  
  8069.     lea buftxt(pc),a1    ;no Buffer
  8070.     bsr.w txttobuf
  8071.     lea navltxt(pc),a1
  8072.     move.l bufadr-base(a6),d0
  8073.     beq.b wo2
  8074.     lea abstxt(pc),a1    ;Buffer(ABS)
  8075.     tst.b absbuf-base(a6)
  8076.     bne.b wo2
  8077.     addq.w #systxt-abstxt,a1;Buffer(SYS)
  8078. wo2:    bsr.w txttobuf
  8079.     move.l d0,d1
  8080.     beq.b nobufm
  8081.     add.l wrksize-base(a6),d1
  8082.     bsr.w twolong_
  8083. nobufm:    sf col-base(a6)
  8084.     bsr.w rawline
  8085.     st d7
  8086. woq:    rts
  8087.  
  8088. d:    cmp.b #2,d3
  8089.     bhi.b dq
  8090.  
  8091.     moveq #16-1,d5
  8092. dd0:    move.l para-base(a6),d0
  8093.     btst #0,d0
  8094.     bne.b dq
  8095.     move.l d0,a5
  8096.  
  8097.     bsr.w disasm
  8098.     bsr hlbrkpt
  8099.  
  8100.     bsr.w rawline
  8101.     bsr.b hdlline
  8102.     move.l a5,para-base(a6)
  8103.  
  8104.     bsr.w stopit
  8105.     beq.b dd3
  8106.  
  8107.     cmp.b #2,d3
  8108.     bne.b dd2
  8109.     move.l para-base(a6),a0
  8110.     cmp.l para+4-base(a6),a0
  8111.     bcs.w dd0
  8112.     bra.b dd3
  8113.  
  8114. dd2:    dbf d5,dd0
  8115. dd3:    st d7
  8116. dq:    rts
  8117.  
  8118. hdltest:move.l para-base(a6),a0
  8119.     move.w (a0),d0
  8120.     sub.w #$4e73,d0        ;$4e73:rte
  8121.     beq.b isjmp
  8122.     subq.w #1,d0        ;$4e74:rtd
  8123.     beq.b isjmp
  8124.     subq.w #1,d0        ;$4e75:rts
  8125.     beq.b isjmp
  8126.     subq.w #2,d0        ;$4e77:rtr
  8127.     beq.b isjmp
  8128.     moveq #-16,d0        ;$fff0
  8129.     and.w (a0),d0
  8130.     cmp.w #$06c0,d0        ;rtm
  8131.     beq.b isjmp    
  8132.     moveq #-64,d0        ;$ffc0
  8133.     and.w (a0),d0
  8134.     cmp.w #$4ec0,d0        ;jmp
  8135.     beq.b isjmp
  8136.     cmp.b #$60,(a0)        ;bra.x
  8137. isjmp:    rts
  8138.  
  8139. hdlline:bsr.b hdltest
  8140.     bne.b nojmp
  8141.     move.l a0,d0
  8142.     lea linebuf-base(a6),a0
  8143.     move.w #">,",(a0)+
  8144.     bsr.w longtoa
  8145.     addq.w #1,a0
  8146.     moveq #48,d0
  8147. linelp:    move.b #"-",(a0)+
  8148.     dbf d0,linelp
  8149.     bsr.w rawline
  8150. nojmp:    rts
  8151.  
  8152. ds:    moveq #0,d0
  8153.     bra.b dchg
  8154. dm:    moveq #1,d0
  8155.     bra.b dchg
  8156. dv:    moveq #2,d0
  8157. dchg:    bchg d0,dissign-base(a6)
  8158.     st d7
  8159.     rts
  8160.     
  8161. s67 =$0000
  8162. s6  =$0100
  8163. s8  =$0200
  8164. stab=$0300
  8165. snop=$0400
  8166. s9a_=$0500    ;68020 cas
  8167. s9a =$0600    ;68020 chk2,cmp2
  8168.  
  8169. nass:    tst.b d3
  8170.     beq.b nassq
  8171.     move.l para-base(a6),d0
  8172.     btst #0,d0
  8173.     bne.b nassq
  8174.     lea linebuf-base(a6),a0
  8175.     move.w #">,",(a0)+
  8176.     bsr.w longtoa
  8177.     bra.w newdis
  8178. nassq:    rts
  8179.  
  8180. n:    tst.b d3
  8181.     beq.b nassq
  8182.     move.l a5,a0
  8183.     addq.w #2,a0        ;skip >,
  8184.     bsr.w skipspc        ;check obsolete
  8185. nn0:    cmp.l lineend-base(a6),a0
  8186.     bhi.b nassq
  8187.     cmp.b #" ",(a0)+    ;search spc
  8188.     bne.b nn0
  8189. nn1:    cmp.l lineend-base(a6),a0    
  8190.     bhi.w endn
  8191.     cmp.b #" ",(a0)        ;skip spc
  8192.     bne.b nn1_
  8193.     addq.w #1,a0
  8194.     bra.b nn1
  8195. nn1_:    move.l a0,a5        ;cmdadr!
  8196. nn3:    cmp.l lineend-base(a6),a0
  8197.     bhi.b nn4
  8198.     move.b (a0)+,d0
  8199.     cmp.b #"Z",d0
  8200.     bhi.b nn3
  8201.     cmp.b #"A",d0
  8202.     bcs.b nn3
  8203.     bset #5,d0
  8204.     move.b d0,-1(a0)
  8205.     bra.b nn3
  8206. nn4:    
  8207.     lea instr(pc),a4
  8208. nn7:    btst #0,para+3-base(a6)
  8209.     bne.b nassq
  8210.     cmp.b #"-",(a5)    ;line?
  8211.     beq.w ignline
  8212.     move.l a5,a0
  8213.     lea 6(a4),a1
  8214. nn6:    move.b (a1),d0
  8215.     bclr #7,d0
  8216.     cmp.b (a0)+,d0
  8217.     bne.w nn5
  8218.     btst #7,(a1)+
  8219.     beq.b nn6
  8220.  
  8221.     lea op68000-2-base(a6),a1
  8222.     clr.l lginstr-base(a6)    ;0:2byte instr,2:4byte (mulx.l...)
  8223.     clr.w (a1)+        ;oplen!
  8224.     clr.w (a1)
  8225.     move.w 4(a4),d0        ;info
  8226.     and.w #$700,d0
  8227.     cmp.w #snop,d0
  8228.     beq.w nnsnop
  8229.     cmp.w #stab,d0
  8230.                 ;bne.b nnstab
  8231.     beq.w nn9
  8232. nnstab:    cmp.b #".",(a0)+
  8233.     bne.w nn5
  8234.     cmp.w #s67,d0
  8235.     bne.b nns67
  8236.     sf imsize-base(a6)    ;%00
  8237.     cmp.b #"b",(a0)+    ;op68000:0
  8238.     beq.w nn9
  8239.     addq.b #1,imsize-base(a6)    ;%01
  8240.     move.w #%01000000,(a1)
  8241.     cmp.b #"w",-1(a0)
  8242.     beq.w nn9
  8243.     addq.b #1,imsize-base(a6)    ;%10
  8244.     move.w #%10000000,(a1)
  8245.     cmp.b #"l",-1(a0)
  8246.     beq.w nn9    
  8247. nns67:    cmp.w #s9a_,d0            ;68020 cas
  8248.     bne.b nns9a_
  8249.     sf imsize-base(a6)    ;%00
  8250.     move.w #%01000000000,(a1)    ;68020
  8251.     cmp.b #"b",(a0)+    ;op68000:0
  8252.     beq.w nn9
  8253.     addq.b #1,imsize-base(a6)    ;%01
  8254.     move.w #%10000000000,(a1)
  8255.     cmp.b #"w",-1(a0)
  8256.     beq.w nn9
  8257.     addq.b #1,imsize-base(a6)    ;%10
  8258.     move.w #%11000000000,(a1)
  8259.     cmp.b #"l",-1(a0)
  8260.     beq.b nn9    
  8261. nns9a_:    cmp.w #s9a,d0            ;68020 chk2,cmp2
  8262.     bne.b nns9a
  8263.     sf imsize-base(a6)    ;%00
  8264.     cmp.b #"b",(a0)+    ;op68000:0
  8265.     beq.b nn9
  8266.     addq.b #1,imsize-base(a6)    ;%01
  8267.     move.w #%01000000000,(a1)
  8268.     cmp.b #"w",-1(a0)
  8269.     beq.b nn9
  8270.     addq.b #1,imsize-base(a6)    ;%10
  8271.     move.w #%10000000000,(a1)
  8272.     cmp.b #"l",-1(a0)
  8273.     beq.b nn9    
  8274. nns9a:    cmp.w #s6,d0
  8275.     bne.b nns6
  8276.     move.b #%01,imsize-base(a6)
  8277.     cmp.b #"w",(a0)+
  8278.     beq.b nn9
  8279.     addq.b #1,imsize-base(a6)    ;%10
  8280.     move.w #%1000000,(a1)
  8281.     cmp.b #"l",-1(a0)
  8282.     beq.b nn9
  8283. nns6:    cmp.w #s8,d0
  8284.     bne.b nn5        ;ill instrtab or cmd
  8285.     move.b #%01,imsize-base(a6)
  8286.     cmp.b #"w",(a0)+
  8287.     beq.b nn9
  8288.     addq.b #1,imsize-base(a6)    ;%10
  8289.     move.w #%100000000,(a1)
  8290.     cmp.b #"l",-1(a0)
  8291.     bne.b nn5
  8292. nn9:    cmp.b #" ",(a0)
  8293.     bne.b nn5
  8294. nn10:    addq.w #1,a0
  8295.     cmp.l lineend-base(a6),a0
  8296.     bhi.b nn5
  8297.     cmp.b #" ",(a0)
  8298.     beq.b nn10
  8299.  
  8300. nnsnop:    st d7
  8301.     move.l a0,a3
  8302.     move.w 4(a4),d0
  8303.     ext.w d0             ;no a4,a5
  8304.     add.w d0,d0
  8305.     lea assoffs(pc),a0
  8306.     move.w (a0,d0.w),d0
  8307.     lea assubs(pc),a0
  8308.  
  8309.     jsr (a0,d0.w)    ;a4:instrtabentry,a5:cmdtxt,a3:cnttxt
  8310.             ;a6:notmodify!!
  8311.     tst.b d7    
  8312.     bne.b nn8
  8313. nn5:    sf d7
  8314.     tst.l (a4)
  8315.     beq.b nretry        ;unknown
  8316.     lea 14(a4),a4
  8317.     bra.w nn7
  8318. nn8:    
  8319.     lea op68000-2-base(a6),a0
  8320.     move.w (a0)+,d0        ;oplen!
  8321.     move.l para-base(a6),a1
  8322.     move.l a1,a5
  8323.     move.w (a0),d1
  8324.     or.w 2(a4),d1
  8325.     move.w d1,(a0)
  8326. nnmem:    move.w (a0)+,(a1)+
  8327.     dbf d0,nnmem
  8328.     bsr.w csup
  8329.     bsr.w disasm
  8330.     bsr.w rawline
  8331.     bsr hdlline
  8332.     move.l a5,para-base(a6)
  8333.     bsr.w disasm
  8334. newdis:    bsr.w rawline
  8335. nretry:    bsr.w csup
  8336. ignline:move.b #11,col-base(a6)
  8337. endn:    st d7
  8338. nq:    rts
  8339.  
  8340. accu:    lea accu8-base(a6),a2
  8341.     bra.b acc0
  8342. index:    lea idxy8-base(a6),a2
  8343. acc0:    subq.l #1,d3
  8344.     bne.b indexq
  8345.     moveq #$16,d0
  8346.     sub.l para-base(a6),d0
  8347.     beq.b ind16
  8348.     cmp.b #$16-8,d0
  8349.     bne.b indexq
  8350.     st d0
  8351. ind16:    move.b d0,(a2)
  8352.     sf autosel-base(a6)
  8353.     st d7
  8354. indexq:    rts
  8355. auto:    st autosel-base(a6)
  8356.     sf accu8-base(a6)
  8357.     sf idxy8-base(a6)
  8358.     st d7
  8359.     rts
  8360.  
  8361. d6502:    cmp.b #2,d3
  8362.     bhi.b d65q
  8363.  
  8364.     moveq #16-1,d5
  8365. d650:    move.l para-base(a6),d0
  8366.     move.l d0,a5
  8367.     bsr.w dis6502
  8368.     move.l a5,para-base(a6)
  8369.     bsr.w rawline
  8370.  
  8371.     bsr.w stopit
  8372.     beq.b d653
  8373.  
  8374.     cmp.b #2,d3
  8375.     bne.b d652
  8376.     move.l para-base(a6),a0
  8377.     cmp.l para+4-base(a6),a0
  8378.     bcs.w d650
  8379.     bra.b d653
  8380.  
  8381. d652:    dbf d5,d650
  8382. d653:    st d7
  8383. d65q:    rts
  8384.  
  8385. nass65:    subq.l #1,d3
  8386.     bne.b nass65q
  8387.     move.l para-base(a6),d0
  8388.     lea linebuf-base(a6),a0
  8389.     move.w #">_",(a0)+
  8390.     bsr.w longtoa
  8391.     bra.w n65new
  8392. nass65q:rts
  8393. n6502:    tst.b d3
  8394.     beq.w n65q
  8395.     move.l a5,a0
  8396.     moveq #xchars-1,d1
  8397. n65n3:    move.b (a0)+,d0
  8398.     cmp.b #"Z",d0
  8399.     bhi.b n65n4
  8400.     cmp.b #"A",d0
  8401.     bcs.b n65n4
  8402.     bset #5,d0
  8403.     move.b d0,-1(a0)
  8404. n65n4:    dbf d1,n65n3
  8405.     lea txt6502(pc),a1
  8406.     lea 25(a5),a0
  8407.     moveq #0,d5
  8408. n655:    moveq #3-1,d0
  8409. n651:    move.b (a0,d0.w),d1
  8410.     bset #5,d1
  8411.     cmp.b (a1,d0.w),d1
  8412.     dbne d0,n651
  8413.     beq.b n652
  8414.     addq.w #3,a1
  8415.     tst.b (a1)
  8416.     bmi.w n65rtr
  8417.     addq.w #1,d5
  8418.     bra.b n655
  8419. n652:    lea tab6502(pc),a1
  8420.     moveq #-1,d3
  8421. n654:    addq.l #1,d3
  8422.     cmp.b (a1)+,d5
  8423.     beq.b n653
  8424.     addq.w #1,a1
  8425.     tst.b (a1)
  8426.     bmi.w n65rtr
  8427.     bra.b n654
  8428. n653:
  8429.     lea 3(a0),a3
  8430. n65n1:    cmp.l lineend-base(a6),a3    
  8431.     bhi.w n65n1_
  8432.     cmp.b #" ",(a3)        ;skip spc
  8433.     bne.b n65n1_
  8434.     addq.w #1,a3
  8435.     bra.b n65n1
  8436. n65n1_:
  8437.     moveq #0,d0
  8438.     move.b (a1)+,d0
  8439.     add.w d0,d0
  8440.     move.w n65mode(pc,d0.w),d0
  8441.     st d7
  8442.     moveq #1,d4
  8443.     move.l a3,-(a7)
  8444.     jsr n65subs(pc,d0.w)
  8445.     cmp.l (a7)+,a3
  8446.     beq.b n654
  8447.     tst.b d7
  8448.     beq.b n654
  8449.     move.l para-base(a6),a5
  8450.     move.b d3,(a5)
  8451.     subq.b #1,d4
  8452.     beq.b n656
  8453.     move.b d0,1(a5)
  8454.     subq.b #1,d4
  8455.     beq.b n656
  8456.     move.b d1,2(a5)
  8457.     subq.b #1,d4
  8458.     beq.b n656
  8459.     move.b d2,3(a5)
  8460. n656:    
  8461.     bsr.w csup
  8462.     bsr.w dis6502
  8463.     move.l a5,para-base(a6)
  8464.     bsr.w rawline
  8465.     bsr.w dis6502
  8466. n65new:    bsr.w rawline
  8467. n65rtr:    bsr.w csup
  8468.     move.b #25,col-base(a6)
  8469.     st d7
  8470. n65q:    rts
  8471. n65subs:
  8472. n65mode:dc.w n65nop-n65subs    ;0
  8473.     dc.w n65imi-n65subs    ;1
  8474.     dc.w n65word-n65subs    ;2
  8475.     dc.w n65byte-n65subs    ;3
  8476.     dc.w n65acu-n65subs    ;4
  8477.     dc.w n65zpix-n65subs    ;5
  8478.     dc.w n65zpiy-n65subs    ;6
  8479.     dc.w n65zpx-n65subs    ;7
  8480.     dc.w n65adrx-n65subs    ;8
  8481.     dc.w n65adry-n65subs    ;9
  8482.     dc.w n65zpy-n65subs    ;10
  8483.     dc.w n65jmpi-n65subs    ;11
  8484.     dc.w n65brel-n65subs    ;12
  8485.     dc.w n65dummy-n65subs    ;13
  8486.     dc.w n65zpl-n65subs    ;14
  8487.     dc.w n65zply-n65subs    ;15
  8488.     dc.w n65zpi-n65subs    ;16
  8489.     dc.w n65srel-n65subs    ;17
  8490.     dc.w n65sriy-n65subs    ;18
  8491.     dc.w n65adlg-n65subs    ;19
  8492.     dc.w n65adlx-n65subs    ;20
  8493.     dc.w n65brlg-n65subs    ;21
  8494.     dc.w n65jpix-n65subs    ;22
  8495.     dc.w n65imac-n65subs    ;23
  8496.     dc.w n65imxy-n65subs    ;24
  8497. n65imxy:tst.b idxy8-base(a6)
  8498.     bra.b n65im
  8499. n65imac:tst.b accu8-base(a6)
  8500. n65im:    beq.b n65imw
  8501. n65imi:    cmp.b #"#",(a3)+
  8502.     bne.b n65fail
  8503.     bra.b n65byte
  8504. n65imw:    cmp.b #"#",(a3)+
  8505.     bne.w fail
  8506. n65word:bsr.b n65adr
  8507.     bra.b n65spc
  8508. ;n65db:    bsr.b n65byte    ;dc.b changed to wdm instruction
  8509. ;    moveq #1,d4
  8510. ;    move.b d0,d3
  8511. ;    rts
  8512. n65byte:bsr.b n65zp
  8513. n65spc:    cmp.b #" ",(a3)+    
  8514.     bne.b n65fail
  8515. n65dummy:rts
  8516. n65zp:    moveq #2,d4
  8517.     cmp.b #"$",(a3)
  8518.     beq.w atobyte_
  8519.     bra.w atodnib
  8520. n65acu:    cmp.b #"a",(a3)+
  8521.     beq.b n65nop
  8522. n65fail:sf d7
  8523. n65nop:    addq.w #1,a3
  8524.     rts
  8525. n65zpix:cmp.b #"(",(a3)+
  8526.     bne.b n65fail
  8527.     bsr.b n65zp
  8528.     bsr.b n65x
  8529. n65brac:cmp.b #")",(a3)+
  8530.     bne.b n65fail
  8531.     rts
  8532. n65zpi:    pea n65spc(pc)
  8533. n65zi:    cmp.b #"(",(a3)+
  8534.     bne.b n65fail
  8535.     bsr.b n65zp
  8536.     bra.b n65brac
  8537. n65zpiy:bsr.b n65zi
  8538. n65y:    cmp.b #",",(a3)+
  8539.     bne.b n65fail
  8540.     cmp.b #"y",(a3)+
  8541.     bne.b n65fail
  8542.     rts
  8543.  
  8544. n65zpx:    bsr.b n65zp
  8545.     bra.b n65x
  8546. n65adr:    cmp.b #"$",(a3)
  8547.     beq.b n65adr0
  8548.     bsr.w atodnib
  8549.     bra.b n65adr1
  8550. n65adr0:bsr.w atoword_
  8551. n65adr1:moveq #3,d4
  8552.     move.w d0,d1
  8553.     lsr.w #8,d1
  8554.     rts
  8555. n65adrx:bsr.b n65adr
  8556. n65x:    cmp.b #",",(a3)+
  8557.     bne.b n65fail
  8558.     cmp.b #"x",(a3)+
  8559.     bne.b n65fail
  8560.     rts
  8561. n65adry:bsr.b n65adr
  8562.     bra.b n65y
  8563. n65zpy:    bsr.b n65zp
  8564.     bra.b n65y
  8565. n65jpix:cmp.b #"(",(a3)+
  8566.     bne.b n65fail
  8567.     bsr.b n65adr
  8568.     bsr.b n65x
  8569.     bra.b n65brac
  8570. n65jmpi:cmp.b #"(",(a3)+
  8571.     bne.b n65fail
  8572.     bsr.b n65adr
  8573.     bra.b n65brac
  8574.  
  8575. n65brlg:bsr.b n65bre
  8576.     sub.l para-base(a6),d0
  8577.     subq.l #3,d0
  8578.     move.l #$7fff,d1
  8579.     cmp.l d1,d0
  8580.     bls.b n65adr1
  8581.     not.l d1
  8582.     cmp.l d0,d1
  8583.     bls.b n65adr1
  8584.     bra.b n65fai2
  8585. n65bre:    cmp.b #"$",(a3)
  8586.     beq.w atolong_
  8587.     bra.w atodnib
  8588. n65brel:moveq #2,d4
  8589.     bsr.b n65bre
  8590.     sub.l para-base(a6),d0
  8591.     subq.l #2,d0
  8592.     moveq #127,d1
  8593.     cmp.l d1,d0
  8594.     bls.b n65bre2
  8595.     moveq #-128,d1
  8596.     cmp.l d0,d1
  8597.     bls.b n65bre2
  8598. n65fai2:sf d7
  8599. n65bre2:rts
  8600. n65zpl:    pea n65spc(pc)
  8601. n65zlg:    cmp.b #"[",(a3)+
  8602.     bne.b n65fai2
  8603.     bsr.w n65zp
  8604.     cmp.b #"]",(a3)+
  8605.     bne.b n65fai2
  8606.     rts
  8607. n65zply:bsr.b n65zlg
  8608.     bra.w n65y
  8609. n65srel:pea n65spc(pc)
  8610. n65sr:    bsr.w n65zp
  8611.     cmp.b #",",(a3)+
  8612.     bne.b n65fai2
  8613.     cmp.b #"s",(a3)+
  8614.     bne.b n65fai2
  8615.     rts
  8616. n65sriy:cmp.b #"(",(a3)+
  8617.     bne.b n65fai2
  8618.     bsr.b n65sr
  8619.     bsr.w n65brac
  8620.     bra.w n65y
  8621. n65adlg:pea n65spc(pc)
  8622. n65adl:    cmp.b #"$",(a3)
  8623.     beq.b n65adl0
  8624.     bsr.w atodnib
  8625.     bra.b n65adl1
  8626. n65adl0:bsr.w atolong_
  8627. n65adl1:moveq #4,d4
  8628.     move.l d0,d1
  8629.     lsr.l #8,d1
  8630.     move.l d0,d2
  8631.     swap d2
  8632.     cmp.w #$ff,d2
  8633.     bhi.b n65fai2
  8634.     rts
  8635. n65adlx:bsr.b n65adl
  8636.     bra.w n65x
  8637.         
  8638. c:    cmp.b #3,d3
  8639.     bne.b cq
  8640.  
  8641.     move.l para-base(a6),a1
  8642.     move.l para+4-base(a6),a2
  8643.     move.l para+8-base(a6),a3
  8644.  
  8645.     lea linebuf+1-base(a6),a0
  8646.     lea linebuf+74-base(a6),a4
  8647.  
  8648. c0:    move.b (a1)+,d0
  8649.     cmp.b (a3)+,d0
  8650.     beq.b c1
  8651.  
  8652.     move.l a1,para-base(a6)
  8653.  
  8654.     move.l a1,d6
  8655.     bsr bufaddr
  8656.  
  8657.     move.b outmode-base(a6),d0
  8658.     beq.b ctable
  8659.     movem.l a0-a2,-(a7)
  8660.     pea ccont(pc)
  8661.     subq.b #1,d0
  8662.     beq mcore
  8663.     bra acore
  8664. ccont:    movem.l (a7)+,a0-a2
  8665.     bra.b c1
  8666.     
  8667. ctable:    move.l a1,d0
  8668.     subq.l #1,d0
  8669.     bsr.w longtoa_
  8670.     addq.w #2,a0
  8671.  
  8672.     cmp.l a4,a0
  8673.     bcs.b c1
  8674.     
  8675.     bsr.w rawline
  8676.     addq.w #1,a0
  8677.  
  8678. c1:    bsr.w stopit
  8679.     beq.b c3
  8680.  
  8681.     cmp.l a2,a1
  8682.     bcs.b c0
  8683.  
  8684. c3:    lea linebuf+1-base(a6),a1
  8685.     cmp.l a1,a0
  8686.     beq.b c2
  8687.     bsr.w rawline
  8688. c2:    st d7
  8689. cq:    rts
  8690.  
  8691. fd:    cmp.b #2,d3
  8692.     bne.b fdq
  8693.     move.l a2,d0        ;asc?
  8694.     beq.b fdq
  8695.  
  8696.     lea dostrkbuf-base(a6),a1    ;to allow scrolling
  8697.     move.l a1,a0
  8698. fd6:    move.b (a2)+,d0
  8699.     cmp.b #34,d0
  8700.     beq.b fd7
  8701.     bset #5,d0        ;lowercase
  8702.     move.b d0,(a0)+
  8703.     cmp.l lineend-base(a6),a2
  8704.     bhi.b fdq
  8705.     bra.b fd6
  8706. fd7:    move.b #"*",(a0)+
  8707.     sf (a0)
  8708.     move.l a1,a2        ;matchstring
  8709.  
  8710. fd0:    move.l para-base(a6),d0
  8711.     btst #0,d0
  8712.     bne.b fdq
  8713.  
  8714.     move.l d0,d6        ;match
  8715.     move.l d0,a5
  8716.     bsr.w disasm
  8717.     move.l a5,para-base(a6)
  8718.  
  8719.     lea lineeof-base(a6),a3
  8720.     moveq #xchars-11-1,d0
  8721.     moveq #" ",d1
  8722. fd4:    cmp.b -(a3),d1
  8723.     dbne d0,fd4        ;set text,0
  8724.     sf 1(a3)
  8725.     lea linebuf+11-base(a6),a3    ;disasm text
  8726.  
  8727.     bsr.b wildcmp
  8728.     bne.b fd1
  8729.  
  8730.     bsr bufaddr        ;store match address
  8731.     bsr.w rawline
  8732.  
  8733. fd1:    bsr.w stopit
  8734.     beq.b fdab
  8735.  
  8736.     move.l para-base(a6),a0
  8737.     cmp.l para+4-base(a6),a0
  8738.     bcs.b fd0
  8739. fd3:    bsr.w clrlbuf
  8740.     st d7
  8741. fdq:    rts
  8742.  
  8743. fdab:    bsr.b fd3
  8744.     move.l a5,d0
  8745. doabort:lea linebuf+1-base(a6),a0
  8746.     lea abotxt(pc),a1
  8747.     bsr.w txttobuf
  8748.     bsr.w longtoa_
  8749.     bra.w rawline
  8750.  
  8751. MAXB    = 8
  8752. MAXB28    = 128    ;MAXB*2*8
  8753. wildcmp:movem.l a2-a4,-(a7)
  8754.     lea bitmap-base(a6),a4    ;a2:wild,a3:name->d0:0:match,1:nomatch
  8755.     moveq #0,d2
  8756. xwclp:     moveq #0,d0
  8757.     move.b (a2),d1
  8758.     bne.b xw1
  8759.     tst.b (a3)
  8760.     beq.b xwcdone
  8761. xw1:    cmp.b #"*",d1
  8762.     bne.b xw10
  8763.     
  8764.     cmp.w #MAXB,d2
  8765.     bne.b xw2
  8766.     moveq #-1,d0        ; error
  8767.     bra.b xwcdone
  8768. xw2:    move.w d2,d0        ; back[bi][0] = w  i.e. back+bi*8
  8769.     lsl.w #3,d0        ; back[bi][1] = n
  8770.     move.l a2,0(a4,d0.w)
  8771.     addq.w #1,a2
  8772.     move.l a3,4(a4,d0.w)
  8773.     addq.w #1,d2
  8774.     bra.b xwclp
  8775. xwgback:subq.w #1,d2
  8776.     bmi.b xw5
  8777.     move.w d2,d0
  8778.     lsl.w #3,d0
  8779.     move.l 4(a4,d0.w),a0
  8780.     tst.b (a0)
  8781.     beq.b xwgback
  8782. xw5:    tst.w d2
  8783.     bmi.b xwcret0
  8784.     move.w d2,d0
  8785.     lsl.w #3,d0
  8786.     move.l 0(a4,d0.w),a2
  8787.     addq.w #1,a2
  8788.     addq.l #1,4(a4,d0.w)
  8789.     addq.w #1,d2
  8790.     move.l 4(a4,d0.w),a3
  8791.     bra.b xwclp
  8792. xw10:    cmp.b #"?",d1
  8793.     bne.b xw20
  8794.     tst.b (a3)
  8795.     bne.b xwcbrk
  8796.     tst.w d2
  8797.     bne.b xwgback
  8798.     bra.b xwcret0
  8799. xw20:     move.b (a3),d0
  8800.     cmp.b (a2),d0
  8801.     beq.b xwcbrk
  8802.     tst.w d2
  8803.     bne.b xwgback
  8804.     bra.b xwcret0
  8805. xwcbrk:    tst.b (a2)+
  8806.     bne.b xwcb1
  8807.     subq.w #1,a2
  8808. xwcb1:    tst.b (a3)+
  8809.     bne.b xwclp
  8810.     subq.w #1,a3
  8811.     bra.w xwclp
  8812. xwcret0:moveq #1,d0
  8813. xwcdone:movem.l (a7)+,a2-a4
  8814.     tst.w d0
  8815.     rts
  8816.  
  8817. fmode:    subq.l #1,d3
  8818.     bne.b fmodeq
  8819.     moveq #2,d1
  8820.     move.l para-base(a6),d0
  8821.     cmp.l d1,d0
  8822.     bhi.b fmodeq
  8823.     move.b d0,outmode-base(a6)    
  8824.     st d7
  8825. fmodeq:    rts
  8826.  
  8827. f:    move.l a2,d0        ;asc ?
  8828.     beq.b f7
  8829.  
  8830.     cmp.b #2,d3
  8831.     bne.w fq
  8832.  
  8833.     lea para+8-base(a6),a1
  8834.     moveq #0,d0
  8835.  
  8836.     moveq #2,d3
  8837. f9:    move.b (a2)+,d0
  8838.     cmp.b #34,d0
  8839.     beq.b f7
  8840.     move.l d0,(a1)+    
  8841.     addq.w #1,d3
  8842.     cmp.b #16,d3
  8843.     bne.b f9
  8844.  
  8845. f7:    cmp.b #3,d3
  8846.     blt.l fq
  8847.  
  8848.     lea para+8-base(a6),a1
  8849.     lea linebuf-base(a6),a0
  8850.     move.l #" sea",(a0)+
  8851.     move.l #"rchi",(a0)+
  8852.     move.l #"ng f",(a0)+
  8853.     move.l #"or: ",(a0)+
  8854.     move.w d3,d2
  8855.     subq.w #3,d2
  8856. f5:    move.l (a1)+,d0
  8857.     bsr.w bytetoa_
  8858.     move.b #" ",(a0)+
  8859.     dbf d2,f5
  8860.     bsr.w rawline
  8861.     addq.w #1,a0
  8862.  
  8863.     move.l para-base(a6),a1
  8864.     move.l para+4-base(a6),a2
  8865.     move.b para+11-base(a6),d4
  8866.  
  8867. f0:    cmp.b (a1),d4            ;quickfind
  8868.     bne.b f6
  8869.  
  8870.     move.l a1,a4
  8871.     
  8872.     lea para+11-base(a6),a3
  8873.  
  8874.     move.w d3,d2
  8875.     subq.w #3,d2
  8876. f4:    move.b (a4)+,d0
  8877.     cmp.b (a3),d0
  8878.     bne.b f1
  8879.     addq.w #4,a3
  8880.     dbf d2,f4
  8881.  
  8882.     move.l a1,para-base(a6)
  8883.  
  8884.     move.l a1,d6
  8885.     bsr bufaddr
  8886.  
  8887.     move.b outmode-base(a6),d0
  8888.     beq.b ftable
  8889.     movem.l a0-a2,-(a7)
  8890.     pea fcont(pc)
  8891.     subq.b #1,d0
  8892.     beq mcore
  8893.     bra acore
  8894. fcont:    movem.l (a7)+,a0-a2
  8895.     bra.b f1
  8896.     
  8897. ftable:    move.l a1,d0
  8898.     bsr.w longtoa_
  8899.     addq.w #2,a0
  8900.  
  8901.     lea linebuf+74-base(a6),a4
  8902.     cmp.l a4,a0
  8903.     bcs.b f1
  8904.     
  8905.     bsr.w rawline
  8906.     addq.w #1,a0
  8907.  
  8908. f1:    bsr.w stopit
  8909.     beq.b f3
  8910.  
  8911. f6:    addq.w #1,a1
  8912.     cmp.l a2,a1
  8913.     bcs.b f0
  8914.  
  8915. f3:    lea linebuf+1-base(a6),a1
  8916.     cmp.l a1,a0
  8917.     beq.b f2
  8918.     bsr.w rawline
  8919. f2:    st d7
  8920. fq:    rts
  8921.  
  8922. frel:    cmp.b #1,d3
  8923.     bne.w frq
  8924.  
  8925.     move.b (a0)+,d0
  8926.     lsl.w #8,d0
  8927.     move.b (a0),d0
  8928.     or.w #$2020,d0    ;lowercase
  8929.     cmp.w #"pc",d0
  8930.     seq d4
  8931.  
  8932.     moveq #-2,d0
  8933.     and.l para-base(a6),d0
  8934.     move.l d0,a1
  8935.  
  8936.     sub.l a2,a2
  8937.     cmp.l #$8000,d0
  8938.     bls.b fr9
  8939.     lea -$8000(a1),a2    ;min
  8940. fr9:    lea $7ffe(a1),a4    ;max
  8941. fr1:    tst.b d4
  8942.     bne.b fr4
  8943.  
  8944.     move.w (a2),d1
  8945.     and.w #%1111000011111000,d1
  8946.     cmp.w #%0101000011001000,d1        ;dbxx
  8947.     beq.b fr5
  8948.  
  8949.     move.b (a2),d1
  8950.     and.w #%11110000,d1
  8951.     cmp.w #%01100000,d1    ;bxx.x
  8952.     bne.b fr0
  8953.  
  8954.     move.b 1(a2),d1
  8955.     ext.w d1
  8956.     beq.b fr5        ;bxx.w
  8957.     bra.b fr6        ;bxx.s
  8958.  
  8959. fr4:    
  8960.     moveq #%111111,d1
  8961.     and.w (a2),d1        ;adr(pc)
  8962.     cmp.w #%111010,d1
  8963.     bne.b fr0
  8964. fr5:    move.w 2(a2),d1
  8965. fr6:    lea 2(a2,d1.w),a3
  8966.     cmp.l para-base(a6),a3
  8967.     bne.b fr0
  8968.  
  8969.     move.l a2,d6
  8970.     bsr bufaddr
  8971.     
  8972.     move.l a2,a5
  8973.     bsr.w disasm
  8974.     bsr.w rawline
  8975.  
  8976. fr0:    bsr.w stopit
  8977.     beq.b fr8
  8978.  
  8979.     addq.w #2,a2
  8980.     cmp.l a2,a4
  8981.     bcc.b fr1
  8982.  
  8983. fr8:    st d7
  8984. frq:    rts
  8985.  
  8986. time:    bsr.w getclok
  8987.     
  8988.     lea linebuf+1-base(a6),a0
  8989.     move.l days-base(a6),d0
  8990.     bsr.w todate
  8991.     lea linebuf+25-base(a6),a0
  8992.     move.l mins-base(a6),d0
  8993.     divu #60,d0
  8994.     bsr.w bytetod
  8995.     move.b #":",(a0)+
  8996.     swap d0
  8997.     bsr.w bytetod
  8998.     move.b #":",(a0)+
  8999.     move.l ticks-base(a6),d0
  9000.     divu #50,d0
  9001.     bsr.w bytetod
  9002.  
  9003.     lea linebuf+1-base(a6),a0
  9004.     bsr.w rawline
  9005.  
  9006.     st d7
  9007. timeq:    rts
  9008.     
  9009. t:    cmp.b #3,d3
  9010.     bne.b tq
  9011.  
  9012.     move.l para-base(a6),a0
  9013.     move.l para+4-base(a6),a1
  9014.     cmp.l a1,a0
  9015.     bcc.b tq
  9016.     move.l para+8-base(a6),a2
  9017.     cmp.l a0,a2
  9018.     bcc.b t0
  9019.  
  9020. t1:    move.b (a0)+,(a2)+
  9021.     cmp.l a1,a0
  9022.     bcs.b t1
  9023.     bra.b t2
  9024.  
  9025. t0:    add.l a1,a2
  9026.     sub.l a0,a2
  9027. t3:    move.b -(a1),-(a2)
  9028.     cmp.l a0,a1
  9029.     bne.b t3        ;t 0 x x
  9030.  
  9031. t2:    st d7
  9032. tq:    rts
  9033.  
  9034. sysinfo:cmp.b #1,d3
  9035.     bhi.w sysq
  9036.  
  9037.     btst #0,4+3.w
  9038.     bne.w syscorr
  9039.     tst.l 4.w
  9040.     beq.w syscorr
  9041.     move.l 4.w,a4
  9042.  
  9043.     lea memtxt(pc),a1
  9044.     lea $142(a4),a3        ;0:memlist
  9045.     move.l para-base(a6),d0
  9046.     beq.b dolist
  9047.  
  9048.     lea rsrctxt(pc),a1
  9049.     lea $150(a4),a3        ;1:resourcelist
  9050.     subq.l #1,d0
  9051.     beq.b dolist
  9052.  
  9053.     lea exectxt(pc),a1
  9054.     lea $15e(a4),a3        ;2:devicelist
  9055.     subq.l #1,d0
  9056.     beq.b dolist
  9057.  
  9058.     lea intrtxt(pc),a1
  9059.     lea $16c(a4),a3        ;3:intlist
  9060.     subq.l #1,d0
  9061.     beq.b dolist
  9062.  
  9063.     lea exectxt(pc),a1
  9064.     lea $17a(a4),a3        ;4:liblist
  9065.     subq.l #1,d0
  9066.     beq.b dolist
  9067.  
  9068.     lea porttxt(pc),a1
  9069.     lea $188(a4),a3        ;5:portlist
  9070.     subq.l #1,d0
  9071.     beq.b dolist
  9072.  
  9073.     lea tasktxt(pc),a1
  9074.     lea $196(a4),a3        ;6:taskready
  9075.     subq.l #1,d0
  9076.     beq.b dolist
  9077.  
  9078.     lea tasktxt(pc),a1
  9079.     lea $1a4(a4),a3        ;7:taskwaiting
  9080.     subq.l #1,d0
  9081.     beq.b dolist
  9082.  
  9083.     lea tasktxt(pc),a1
  9084.     lea $114(a4),a3        ;8:thistask
  9085.     subq.l #1,d0
  9086.     beq.b dolist
  9087.  
  9088.     lea rsndtxt(pc),a1
  9089.     lea $12c(a4),a3        ;9:resident list
  9090.     subq.l #1,d0
  9091.     beq.w dorslst
  9092.     bra.w sysq    
  9093.  
  9094. dolist:    bsr.w msgout
  9095.  
  9096.     move.l (a3)+,a2
  9097. nextlst:addq.w #1,a0
  9098.     cmp.l a3,a2
  9099.     beq.w endlist
  9100.  
  9101.     move.l a2,d0        ;addr
  9102.     beq.w syscorr
  9103.     btst #0,d0
  9104.     bne.w syscorr
  9105.     bsr.w longtoa_
  9106.  
  9107.     move.l para-base(a6),d0
  9108.     bne.w nomeml
  9109.  
  9110.     lea linebuf+1-base(a6),a0    ;overwrite addr
  9111.     move.l $14(a2),d0    ;lower
  9112.     bsr.w longtoa_
  9113.  
  9114.     addq.w #1,a0
  9115.     move.l $10(a2),d0    ;first
  9116.     bsr.w longtoa_
  9117.  
  9118.     addq.w #1,a0
  9119.     move.l $18(a2),d0    ;upper
  9120.     bsr.w longtoa_
  9121.  
  9122.     addq.w #1,a0
  9123.     move.l $1c(a2),d0    ;free    use only 24 bit
  9124.     bsr.w adrtoa_
  9125.  
  9126.     addq.w #1,a0
  9127.     move.w $e(a2),d0    ;attr
  9128.     bsr.w wordtoa_
  9129.  
  9130.     move.b 9(a2),d0        ;pri
  9131.     bsr.w dopri
  9132.     bra.w namelst
  9133.  
  9134. nomeml:    subq.l #2,d0        ;devlist
  9135.     beq.b dodevl
  9136.     subq.l #2,d0        ;liblist
  9137.     bne.b nolibl
  9138. dodevl:
  9139.     addq.w #1,a0
  9140.  
  9141.     moveq #0,d0
  9142.     move.w $20(a2),d0    ;opencount
  9143.     bsr.w hextod
  9144.  
  9145.     lea linebuf+17-base(a6),a0
  9146.     move.w $14(a2),d0    ;version
  9147.     bsr.w hextod
  9148.  
  9149.     lea linebuf+23-base(a6),a0
  9150.     move.w $16(a2),d0    ;revision
  9151.     bsr.w hextod
  9152.  
  9153.     lea linebuf+29-base(a6),a0
  9154.     move.w $10(a2),d0    ;negsize
  9155.     bsr.w hextod
  9156.  
  9157.     lea linebuf+35-base(a6),a0
  9158.     move.w $12(a2),d0    ;possize
  9159.     bsr.w hextod
  9160.  
  9161.     lea linebuf+41-base(a6),a0
  9162.     move.w $1c(a2),d0    ;chksum
  9163.     bsr.w wordtoa_
  9164.     bra.w namelst
  9165.  
  9166. nolibl:    subq.l #1,d0
  9167.     bne.b noportl
  9168.  
  9169.     move.l #" Sig",d1
  9170.     move.l #"nal ",d2
  9171.     move.b $e(a2),d0    ;flag
  9172.     beq.b flagsig
  9173.     move.l #" Sof",d1
  9174.     move.l #"tint",d2
  9175.     subq.b #1,d0
  9176.     beq.b flagsig
  9177.     move.l #" Ign",d1
  9178.     move.l #"ore ",d2
  9179. flagsig:move.l d1,(a0)+
  9180.     move.l d2,(a0)+
  9181.  
  9182.     addq.w #2,a0
  9183.     moveq #0,d0
  9184.     move.b $f(a2),d0    ;sigbit
  9185.     bsr.w hextod
  9186.  
  9187.     lea linebuf+24-base(a6),a0
  9188.     move.l $10(a2),a1    ;task
  9189.     move.l a1,d0
  9190.     beq.b nonamec
  9191.     btst #0,d0
  9192.     bne.w syscorr
  9193.     move.l $a(a1),a1    ;taskname
  9194.     move.l a1,d0
  9195.     beq.b nonamec
  9196.     moveq #22-1,d0
  9197. namecpy:move.b (a1)+,(a0)+
  9198.     dbeq d0,namecpy
  9199.     bra.b namecp2
  9200. nonamec:move.l #"----",(a0)
  9201.     move.l (a0)+,(a0)
  9202. namecp2:bra.w namelst    
  9203.  
  9204. noportl:subq.l #1,d0        ;6:taskready
  9205.     beq.b taskrdy
  9206.     subq.l #1,d0        ;7:taskwaiting
  9207.     beq.b taskrdy
  9208.     subq.l #1,d0        ;8:thistask
  9209.     bne.w notaskl
  9210.     
  9211. taskrdy:addq.w #1,a0
  9212.     lea typetab(pc),a1
  9213.     move.b $8(a2),d0    ;type
  9214.     cmp.b #14,d0
  9215.     bsr.w indextx
  9216.  
  9217.     lea linebuf+19-base(a6),a0
  9218.     move.b 9(a2),d0        ;pri
  9219.     bsr.w dopri
  9220.  
  9221.     lea linebuf+24-base(a6),a0
  9222.     lea statetb(pc),a1
  9223.     move.b $f(a2),d0    ;state
  9224.     cmp.b #6,d0
  9225.     bsr.w indextx
  9226.  
  9227.     lea linebuf+32-base(a6),a0
  9228.     move.l $3a(a2),d0    ;splower
  9229.     bsr.w longtoa_
  9230.  
  9231.     addq.w #1,a0
  9232.     move.l $3e(a2),d0
  9233.     sub.l $3a(a2),d0    ;size 
  9234.     bsr.w hextod
  9235.  
  9236.     lea linebuf+48-base(a6),a0
  9237.     move.l $3e(a2),d0
  9238.     sub.l $36(a2),d0    ;used
  9239.     bsr.w hextod
  9240.  
  9241.     nop
  9242. notaskl:    
  9243. namelst:lea linebuf+54-base(a6),a0
  9244.     move.l $a(a2),a1
  9245.     move.l a1,d0
  9246.     beq.b nolstn
  9247.     moveq #26-1,d0
  9248. lstname:move.b (a1)+,(a0)+
  9249.     dbeq d0,lstname
  9250.     bra.b lstnam0
  9251. nolstn:    move.l #"----",(a0)
  9252.     move.l (a0)+,(a0)
  9253. lstnam0:bsr.w rawline
  9254.  
  9255.     move.l (a2),a2
  9256.     move.l a2,d0
  9257.     beq.b endlist
  9258.     btst #0,d0
  9259.     bne.b syscorr
  9260.     lea $114+4(a4),a1    ;thistask=node, no list
  9261.     cmp.l a3,a1
  9262.     bne.w nextlst
  9263.  
  9264. endlist:
  9265.     st d7
  9266. sysq:    rts    
  9267. syscorr:bsr.w clrlbuf
  9268.     st d7
  9269.     lea corrtxt(pc),a1
  9270.     bra.w msgout
  9271.  
  9272. indextx:bls.b tsstate
  9273.     moveq #0,d0
  9274. tsstate:subq.b #1,d0
  9275.     bmi.b fndind
  9276. endind:    btst #7,(a1)+
  9277.     beq.b endind
  9278.     bra.b tsstate
  9279. fndind:    bra.w txttobuf
  9280.  
  9281. dopri:    addq.w #2,a0
  9282.     ext.w d0
  9283.     ext.l d0
  9284.     bpl.b rsdpri
  9285.     move.b #"-",-1(a0)
  9286.     neg.l d0
  9287. rsdpri:    bra.w hextod
  9288. dorslst:bsr.w msgout
  9289.     move.l (a3),a3
  9290. nextrsl:addq.w #1,a0
  9291. rslind:    move.l (a3)+,d0
  9292.     beq.b endrsl
  9293.     bclr #31,d0
  9294.     beq.b rslnorm
  9295.     move.l d0,a3
  9296.     bra.b rslind
  9297. rslnorm:move.l d0,a2
  9298.     bsr.w longtoa_
  9299.  
  9300.     addq.w #1,a0
  9301.     lea typetab(pc),a1
  9302.     moveq #0,d0
  9303.     move.b $c(a2),d0    ;type
  9304.     cmp.b #14,d0
  9305.     bsr.b indextx
  9306.  
  9307.     lea linebuf+19-base(a6),a0
  9308.     move.b $d(a2),d0    ;pri
  9309.     bsr.b dopri
  9310.  
  9311.     lea linebuf+40-base(a6),a0
  9312.     move.l $12(a2),a1
  9313.     move.l a1,d0
  9314.     beq.b norsdn
  9315.     moveq #40-1,d0
  9316. rsdname:move.b (a1)+,(a0)+
  9317.     dbeq d0,rsdname
  9318.     bra.b rsdnam0
  9319. norsdn:    move.l #"----",(a0)
  9320.     move.l (a0)+,(a0)
  9321. rsdnam0:
  9322.  
  9323.     bsr.w rawline
  9324.     bra.b nextrsl
  9325. endrsl:    st d7
  9326.     rts
  9327.  
  9328. custom:    tst.l d3
  9329.     bne.w customq
  9330.     bsr clrscr
  9331.  
  9332.     lea linebuf-base(a6),a4
  9333.     lea custnam(pc),a2
  9334.     lea cust2nm(pc),a3
  9335.     moveq #0,d6
  9336. custom2:move.l a4,a0
  9337.  
  9338.     move.l #$dff000,d0
  9339.     add.w d6,d0
  9340.     add.w d6,d0
  9341.     bsr adrtoa_
  9342.     addq.w #1,a0
  9343.  
  9344.     cmp.b (a2),d6
  9345.     bne.b custom1
  9346.  
  9347.     lea 1(a2),a1
  9348.     bsr txttobuf
  9349.     move.l a1,a2
  9350.     bra.b custom6
  9351.     
  9352. custom1:move.l a3,a1
  9353. custom5:cmp.b 1(a1),d6
  9354.     bhi.b custom3
  9355.     moveq #0,d2
  9356.     move.b d6,d2
  9357.     sub.b (a1),d2
  9358.     bcs.b custom3
  9359.     moveq #0,d1
  9360.     move.b 2(a1),d1
  9361.     divu d1,d2
  9362.     swap d2
  9363.     tst.w d2
  9364.     bne.b custom3
  9365.  
  9366.     addq.w #3,a1
  9367. custom4:move.b (a1)+,(a0)+
  9368.     cmp.b #" ",(a1)
  9369.     bhi.b custom4
  9370.     swap d2
  9371.     add.b (a1)+,d2
  9372.     moveq #0,d0
  9373.     move.b d2,d0
  9374.     bsr hextod
  9375.     bsr txttobuf
  9376.     bra.b custom6
  9377. custom3:addq.w #3,a1
  9378. custom7:btst #7,(a1)+
  9379.     beq.b custom7
  9380.     cmp.b #-1,(a1)
  9381.     bne.b custom5
  9382.     bra.b custom8
  9383. custom6:lea 20(a4),a4
  9384.     lea linebuf+60-base(a6),a0
  9385.     cmp.l a0,a4
  9386.     bls.b custom8
  9387.     bsr rawline
  9388.     move.l a0,a4
  9389. custom8:
  9390.  
  9391.     move.b row-base(a6),d0
  9392.     cmp.b rowsm1-base(a6),d0
  9393.     bne.b customa
  9394.     bsr waitrmb
  9395.     beq.b custom9
  9396.     bsr clrscr
  9397. customa:addq.w #1,d6
  9398.     cmp.w #$100,d6
  9399.     bne.w custom2
  9400.     
  9401. custom9:st d7
  9402. customq:rts
  9403.  
  9404. MinCopCom = 5        ; Minimum amount of MOVE commands for coplist
  9405. MaxWait      = 11        ; Maximum amount of adjacent wait/skip commands
  9406. huntcop:sub.l a4,a4
  9407.     move.l himem-base(a6),a5
  9408.     tst.l d3
  9409.     beq.b huntchp
  9410.     subq.l #2,d3
  9411.     bne.w huntcq
  9412.     movem.l para-base(a6),a4-a5
  9413.     cmp.l a4,a5
  9414.     bls.w huntcq
  9415.     move.l a4,d0
  9416.     btst d3,d0    ;d3:0
  9417.     bne.w huntcq
  9418.     move.l a5,d0
  9419.     btst d3,d0
  9420.     bne.b huntcq
  9421.  
  9422. huntchp:move.l    #$0088008a,d2    ;strobe regs
  9423. huntlp:    cmp.l a4,a5        ;reached end yet?
  9424.     beq.b endhunt
  9425.     move.w (a4)+,d0
  9426.     cmp.w d0,d2
  9427.     beq.b huntstp        ;find strobe
  9428.     swap d2
  9429.     cmp.w d0,d2
  9430.     beq.b huntstp
  9431.     addq.w #1,d0        ;$ffff
  9432.     bne.b huntlp
  9433.     cmp.w #$fffe,(a4)
  9434.     bne.b huntlp
  9435. huntstp:addq.w #2,a4        ;next time continue search from here
  9436.     lea -4(a4),a3        ;end of coplist
  9437.     moveq #-MinCopCom,d3    ;minimum amount of commands
  9438. cntsrch:moveq #-MaxWait,d1    ;maximum amount wait/skip commands
  9439. srchlp:    subq.b #1,d1
  9440.     beq.b endsrch
  9441.     moveq #2,d0        ;-$fffffffe
  9442.     add.l -(a3),d0        ;get data
  9443.     beq.b endsrch
  9444.     subq.l #2,d0
  9445.     swap d0
  9446.     btst #0,d0        ;ignore wait/skip commands
  9447.     bne.b srchlp
  9448.     cmp.w d2,d0        ;strobe?
  9449.     beq.b endsrch
  9450.     swap d2
  9451.     cmp.w d2,d0        ;strobe?
  9452.     beq.b endsrch
  9453.     cmp.w #$020,d0        ;read only
  9454.     bcs.b endsrch
  9455.     cmp.w #$1fe,d0        ;copnop
  9456.     bhi.b endsrch
  9457.     addq.l #1,d3        ;inc mincounter
  9458.     move.l a3,d4        ;save current
  9459.     bra.b cntsrch
  9460. endsrch:tst.l d3
  9461.     bmi.b badlist
  9462.     lea linebuf+1-base(a6),a0
  9463.     move.l d4,d0
  9464.     move.l a4,d1
  9465.     bsr twolong_
  9466.     bsr rawline        
  9467.     bsr stopit
  9468.     beq.b endhunt
  9469. badlist:bra.b huntlp
  9470.  
  9471. endhunt:st d7
  9472. huntcq:    rts
  9473.  
  9474. copper:    cmp.b #2,d3
  9475.     bgt.b copq
  9476.  
  9477.     moveq #16-1,d5
  9478. discop:    
  9479. cop1:    bsr.b ccore
  9480.  
  9481.     bsr.w stopit
  9482.     beq.b cop3
  9483.  
  9484.     cmp.b #2,d3
  9485.     bne.b cop2
  9486.     move.l para-base(a6),a0
  9487.     cmp.l para+4-base(a6),a0
  9488.     bcs.b cop1
  9489.     bra.b cop3
  9490.  
  9491. cop2:    dbf d5,cop1
  9492. cop3:    st d7
  9493. copq:    rts
  9494.  
  9495. ccore:    lea linebuf-base(a6),a0
  9496.     move.w #">.",(a0)+
  9497.     move.l para-base(a6),d0
  9498.     move.l d0,a2
  9499.     btst #0,d0        ;even addr
  9500.     bne.w copq
  9501.     bsr.w longtoa        ;chipmem, but use 32 bit
  9502.     add.w #1,a0
  9503.     move.l (a2),d1
  9504.     moveq #-2,d0
  9505.     cmp.l d0,d1
  9506.     bne.b ncopend
  9507.     lea copendl(pc),a1
  9508.     bsr.w txttobuf
  9509.     bra.w cop0
  9510. ncopend:move.l d1,d0
  9511.     and.l #$10001,d0
  9512.     cmp.l #$10000,d0
  9513.     bne.b nowait
  9514.     lea copwait(pc),a1
  9515.     bra.b dohvpos
  9516. nowait:    cmp.l #$10001,d0
  9517.     bne.b noskip
  9518.     lea copskip(pc),a1
  9519. dohvpos:bsr.w txttobuf
  9520.     addq.w #4,a0
  9521.     moveq #8,d2
  9522.     rol.l d2,d1
  9523.     move.b d1,d0        ;vert
  9524.     bsr.w bytetoa_
  9525.     move.b #",",(a0)+
  9526.     rol.l d2,d1
  9527.     move.b d1,d0
  9528.     lsr.b #1,d0        ;horiz
  9529.     bsr.w bytetoa_
  9530.     move.b #",",(a0)+
  9531.     rol.l d2,d1
  9532.     moveq #"0",d0
  9533.     bclr #7,d1        ;waitblt disable
  9534.     beq.b wasclr    
  9535.     moveq #"1",d0
  9536. wasclr:    move.b d0,(a0)+
  9537.     move.b #",",(a0)+
  9538.     move.b d1,d0        ;vert mask
  9539.     bsr.w bytetoa_
  9540.     move.b #",",(a0)+
  9541.     rol.l d2,d1
  9542.     move.b d1,d0
  9543.     lsr.b #1,d0        ;horiz mask
  9544.     bsr.w bytetoa_
  9545.     bra.w cop0
  9546. noskip:    lea copmove(pc),a1
  9547.     bsr.w txttobuf
  9548.     addq.w #4,a0
  9549.     move.b #"#",(a0)+
  9550.     move.w d1,d0        ;value
  9551.     bsr.w wordtoa_    
  9552.     move.b #",",(a0)+
  9553.     moveq #0,d0
  9554.     move.w (a2),d1        ;dest
  9555.     cmp.w #$3e,d1
  9556.     bls.w hexdest
  9557.     cmp.w #$1fe,d1
  9558.     bhi.b hexdest
  9559.     move.w d1,d0
  9560.     lsr.w #1,d0        ;$040-$1fe /2 
  9561.     lea copname(pc),a1
  9562. cntcop:    cmp.b (a1),d0
  9563.     bne.b copsrch
  9564.     addq.w #1,a1
  9565. cpycnam:move.b (a1)+,(a0)    ;name found
  9566.     bclr #7,(a0)+
  9567.     beq.b cpycnam
  9568.     bra.b cop0
  9569. copsrch:cmp.b #$1fe/2,(a1)+        ;unknown dest
  9570.     beq.b copdis2
  9571. findnxt:btst #7,(a1)+
  9572.     beq.b findnxt
  9573.     bra.b cntcop    
  9574. copdis2:lea cp2name(pc),a1
  9575. cntcop2:cmp.b (a1),d0        ;first
  9576.     bcs.b copsrc2
  9577.     cmp.b 1(a1),d0        ;last
  9578.     bhi.b copsrc2
  9579.     moveq #0,d2        ;numbercnt
  9580.     move.b d0,d4
  9581. copnxt:    cmp.b (a1),d4
  9582.     beq.b fndcop
  9583.     addq.b #1,d2
  9584.     sub.b 2(a1),d4        ;period
  9585.     cmp.b (a1),d4        ;last
  9586.     bcc.b copnxt
  9587.     bra.b copsrc2
  9588. fndcop:    addq.w #3,a1
  9589. cpycnm2:move.b (a1)+,d0
  9590.     cmp.b #1,d0
  9591.     bhi.b copasci
  9592.     add.b d0,d2
  9593.     move.l d2,d0
  9594.     bsr.w hextod
  9595.     bra.b cpycnm2
  9596. copasci:move.b d0,(a0)    ;name found
  9597.     bclr #7,(a0)+
  9598.     beq.b cpycnm2
  9599.     bra.b cop0
  9600. copsrc2:cmp.b #-1,(a1)        ;unknown dest
  9601.     beq.b hexdest
  9602.     addq.w #3,a1        ;skip infobytes
  9603. findn2:    btst #7,(a1)+        ;skip name
  9604.     beq.b findn2
  9605.     bra.b cntcop2    
  9606. hexdest:move.w d1,d0
  9607.     bsr.w wordtoa_     
  9608. cop0:    addq.l #4,para-base(a6)
  9609.     bra rawline
  9610.  
  9611. copaq:
  9612. copass:    tst.b d3
  9613.     beq.w copaq
  9614.     btst #0,para+3-base(a6)
  9615.     bne.b copaq
  9616.     move.l a5,a0
  9617.  
  9618.     addq.w #2,a0        ;skip >,
  9619.     bsr.w skipspc        ;check obsolete
  9620. copa0:    cmp.l lineend-base(a6),a0
  9621.     bhi.w copq
  9622.     cmp.b #" ",(a0)+    ;search spc
  9623.     bne.b copa0
  9624. copa1:    cmp.l lineend-base(a6),a0    
  9625.     bhi.w endcopa
  9626.     cmp.b #" ",(a0)        ;skip spc
  9627.     bne.b copa1_
  9628.     addq.w #1,a0
  9629.     bra.b copa1
  9630. copa1_:    move.l a0,a2        ;cmdadr!
  9631. copa3:    cmp.l lineend-base(a6),a0
  9632.     bhi.b copa4
  9633.     move.b (a0)+,d0
  9634.     cmp.b #"Z",d0
  9635.     bhi.b copa3
  9636.     cmp.b #"A",d0
  9637.     bcs.b copa3
  9638.     bset #5,d0        ;lcase all
  9639.     move.b d0,-1(a0)
  9640.     bra.b copa3
  9641. copa4:    lea copmove(pc),a1
  9642.     bsr.w copcmp        ;a2:cmdadr,>a3:nexttxt
  9643.     bne.w nocopmv
  9644.     cmp.b #"#",(a3)+
  9645.     bne.w copassy
  9646.     st d7
  9647.     bsr.w atoword_
  9648.     tst.b d7
  9649.     beq.w copassy
  9650.     move.w d0,d6        ;value
  9651.     cmp.b #",",(a3)+
  9652.     bne.w copassy
  9653.     cmp.b #"$",(a3)
  9654.     bne.b destsym
  9655.     bsr.w atoword_
  9656.     tst.b d7
  9657.     beq.w copassy
  9658.     btst #0,d0        ;moveflag
  9659.     bne.w copassy
  9660. copmv4:    swap d0            ;abs dest
  9661.     move.w d6,d0
  9662.     move.l d0,d6
  9663.     bra.w copmake
  9664. destsym:lea copname(pc),a1
  9665. copmv3:    move.l a3,a0
  9666.     moveq #0,d0
  9667.     move.b (a1)+,d0
  9668. copmv1:    move.b (a1),d1
  9669.     bset #5,d1        ;to lcase
  9670.     bclr #7,d1
  9671.     cmp.b (a0)+,d1        
  9672.     bne.b copmv0
  9673.     btst #7,(a1)+
  9674.     beq.b copmv1
  9675.     add.w d0,d0        ;regadr
  9676.     bra.b copmv4
  9677. copmv0:    cmp.b #$1fe/2,d0    ;end of tab
  9678.     beq.b ncopkey
  9679. copmv2:    btst #7,(a1)+        ;next entry
  9680.     beq.b copmv2
  9681.     bra.b copmv3
  9682. ncopkey:
  9683.     lea cp2name(pc),a1
  9684. copmv5:    move.l a3,a0
  9685.     moveq #0,d0
  9686.     move.b (a1)+,d0        ;1st
  9687.     moveq #0,d2
  9688.     move.b (a1)+,d2        ;last
  9689.     moveq #0,d3
  9690.     move.b (a1)+,d3        ;step
  9691. copmv7:    move.b (a1),d1
  9692.     cmp.b #1,d1        ;nameindex?
  9693.     bhi.b copmv9
  9694.     moveq #0,d4
  9695.     move.b (a0),d4
  9696.     sub.b #"0",d4
  9697.     bcs.w copmv9    ;assy
  9698.     cmp.b #9,d4
  9699.     bhi.w copmv9    ;assy
  9700.     addq.w #1,a0
  9701.     move.b (a0),d5
  9702.     sub.b #"0",d5
  9703.     bcs.b copmv10        ;1digit
  9704.     cmp.b #9,d5
  9705.     bhi.b copmv10
  9706.     addq.w #1,a0
  9707.     mulu #10,d4        ;2digit
  9708.     add.b d5,d4
  9709. copmv10:sub.b d1,d4        ;numoffset
  9710.     bmi.w copassy        ;too low
  9711.     add.w d3,d3
  9712.     mulu d3,d4        ;regoffset
  9713.     add.w d0,d0
  9714.     add.w d0,d4        ;regdest
  9715.     add.w d2,d2
  9716.     cmp.w d2,d4
  9717.     bhi.w copassy        ;too high
  9718.     bra.b copmv11
  9719. copmv9:    bset #5,d1        ;to lcase
  9720.     bclr #7,d1
  9721.     cmp.b (a0)+,d1        
  9722.     bne.b copmv8
  9723. copmv11:btst #7,(a1)+
  9724.     beq.b copmv7
  9725.     move.w d4,d0        ;regdest
  9726.     bra.w copmv4
  9727. copmv8:    cmp.b #-1,d0        ;end of tab
  9728.     beq.w copassy    ;ncopkey
  9729. copmv6:    btst #7,(a1)+        ;next entry
  9730.     beq.b copmv6
  9731.     bra.w copmv5
  9732.  
  9733. nocopmv:lea copwait(pc),a1
  9734.     bsr.w copcmp
  9735.     bne.b nocopwt
  9736.     move.l #$10000,d6
  9737.     bra.b waitskp
  9738.  
  9739. nocopwt:lea copskip(pc),a1
  9740.     bsr.w copcmp
  9741.     bne.b nocopsk
  9742.     move.l #$10001,d6
  9743. waitskp:st d7
  9744.     bsr.w atobyte_
  9745.     tst.b d7
  9746.     beq.w copassy
  9747.     move.b d0,d4        ;vert
  9748.     lsl.l #8,d4
  9749.     cmp.b #",",(a3)+
  9750.     bne.w copassy
  9751.     bsr.w atobyte_
  9752.     tst.b d7
  9753.     beq.w copassy
  9754.     add.b d0,d0
  9755.     bcs.w copassy        ;horiz
  9756.     move.b d0,d4
  9757.     lsl.l #8,d4
  9758.     cmp.b #",",(a3)+
  9759.     bne.b copassy
  9760.     move.b (a3)+,d0        ;bltwait disable
  9761.     moveq #"0",d1
  9762.     cmp.b d0,d1
  9763.     beq.b bltwait
  9764.     moveq #"1",d1
  9765.     cmp.b d0,d1
  9766.     bne.b copassy
  9767.     bset #7,d4
  9768. bltwait:cmp.b #",",(a3)+
  9769.     bne.b copassy
  9770.     bsr.w atobyte_
  9771.     tst.b d7
  9772.     beq.b copassy
  9773.     cmp.b #$7f,d0        ;vert mask
  9774.     bhi.b copassy
  9775.     or.b d0,d4
  9776.     lsl.l #8,d4
  9777.     cmp.b #",",(a3)+
  9778.     bne.b copassy
  9779.     bsr.w atobyte_
  9780.     tst.b d7
  9781.     beq.b copassy
  9782.     add.b d0,d0        ;horiz mask
  9783.     bcs.b copassy
  9784.     move.b d0,d4
  9785.     or.l d4,d6
  9786.     bra.b copmake
  9787.  
  9788. nocopsk:lea copendl(pc),a1
  9789.     bsr.b copcmp
  9790.     bne.b nocopel
  9791.     moveq #-2,d6        ;endlist
  9792.     bra.b copmake
  9793.  
  9794. nocopel:lea copdcl(pc),a1
  9795.     bsr.b copcmp
  9796.     bne.b nocopdc
  9797.     st d7
  9798.     bsr.w atolong_
  9799.     tst.b d7
  9800.     beq.b copassy
  9801.     move.l d0,d6
  9802.     bra.b copmake
  9803.  
  9804. nocopdc:bra.b copassy
  9805.  
  9806. copmake:move.l para-base(a6),a0
  9807.     move.l d6,(a0)
  9808.  
  9809.     bsr.w csup
  9810.     moveq #1,d3
  9811.     moveq #2-1,d5
  9812.     bsr.w discop
  9813.  
  9814. copassy:bsr.w csup
  9815.     move.b #11,col-base(a6)
  9816. endcopa:st d7
  9817.     rts
  9818.  
  9819. copcmp:    move.l a2,-(a7)
  9820. copcmp0:move.b (a1),d0
  9821.     bset #5,d0    ;to lcase
  9822.     bclr #7,d0
  9823.     cmp.b (a2)+,d0
  9824.     bne.b copdif
  9825.     btst #7,(a1)+
  9826.     beq.b copcmp0    
  9827.     move.l a2,a0
  9828.     bsr.w skipspc    ;eol check?
  9829.     move.l a0,a3
  9830.     moveq #0,d0
  9831. copdif:    move.l (a7)+,a2
  9832.     rts        ;a3:nextptr,bne.b diff, beq.b equal
  9833.  
  9834. ob:    moveq #0,d4
  9835.     bra.b odoit
  9836. ow:    moveq #1,d4
  9837.     bra.b odoit
  9838. ol:    moveq #2,d4
  9839.     bra.b odoit
  9840. eb:    moveq #3,d4
  9841.     bra.b edoit
  9842. ew:    moveq #4,d4
  9843.     bra.b edoit
  9844. el:    moveq #5,d4
  9845. edoit:    lea eortxt(pc),a2
  9846.     bra.b odo0
  9847. odoit:    lea filltxt(pc),a2
  9848. odo0:    move.b lpinfo(pc,d4.w),d5
  9849.     cmp.b #8,d5
  9850.     beq.b obyte
  9851.     cmp.b #2,cpu-base(a6)
  9852.     bcc.b obyte        ;odd word/longword
  9853.     btst #0,para+3-base(a6)
  9854.     bne.b owq
  9855. obyte:    subq.l #3,d3    ;3 parameters
  9856.     bne.b owq
  9857.     bset d5,d3    ;overflow
  9858.     movem.l para-base(a6),d0/d1/d2
  9859.     tst.b d5
  9860.     beq.b olong
  9861.     cmp.l d3,d2    ;argument to large
  9862.     bcc.b owq
  9863. olong:    move.l d0,a0
  9864.     add.w d4,d4    ;2bytes/ptr
  9865.     lea lptoa_(pc),a4
  9866.     add.w lptoa_(pc,d4.w),a4
  9867.     lsl.w #2,d4    ;8bytes/subroutine
  9868.     jsr lpsubs(pc,d4.w)
  9869.     move.l a0,d1        ;d0:start,a0:end
  9870.     lea linebuf+1-base(a6),a0
  9871.     bsr.w twolong_
  9872.     move.l a2,a1
  9873.     bsr.w txttobuf
  9874.     move.l d2,d0
  9875.     jsr (a4)
  9876.     bsr.w rawline
  9877.  
  9878.     st d7
  9879. owq:    rts
  9880. lptoa_:    dc.w bytetoa_-lptoa_,wordtoa_-lptoa_,longtoa_-lptoa_
  9881.     dc.w bytetoa_-lptoa_,wordtoa_-lptoa_,longtoa_-lptoa_
  9882. lpinfo:    dc.b 8,16,0,8,16,0    ;used bits,0:32
  9883.  
  9884. lpsubs:    move.b d2,(a0)+
  9885.     cmp.l d1,a0
  9886.     bcs.b *-4
  9887.     rts
  9888.     move.w d2,(a0)+
  9889.     cmp.l d1,a0
  9890.     bcs.b *-4
  9891.     rts
  9892.     move.l d2,(a0)+
  9893.     cmp.l d1,a0
  9894.     bcs.b *-4
  9895.     rts
  9896.     eor.b d2,(a0)+
  9897.     cmp.l d1,a0
  9898.     bcs.b *-4
  9899.     rts
  9900.     eor.w d2,(a0)+
  9901.     cmp.l d1,a0
  9902.     bcs.b *-4
  9903.     rts
  9904.     eor.l d2,(a0)+
  9905.     cmp.l d1,a0
  9906.     bcs.b *-4
  9907.     rts
  9908.  
  9909. nopit:    subq.l #2,d3
  9910.     bne.b nopitq
  9911.     movem.l para-base(a6),d0-d1
  9912.     btst d3,d0
  9913.     bne.b nopitq
  9914.     move.l d0,a0
  9915. nopit1:    subq.l #1,d1
  9916.     bmi.b nopit0
  9917.     move.w #$4e71,(a0)+
  9918.     bra.b nopit1
  9919. nopit0:    st d7
  9920. nopitq:    rts
  9921.  
  9922. implode:subq.l #2,d3
  9923.     bmi.b noimpl
  9924.     movem.l para-base(a6),d0-d2
  9925.     subq.l #1,d3
  9926.     beq.b impmode
  9927.     moveq #0,d2
  9928. impmode:moveq #11,d3
  9929.     cmp.l d3,d2
  9930.     bhi.b noimpl
  9931.     swap d2
  9932.     btst #0,d0
  9933.     bne.b noimpl
  9934.     move.l d0,a0        ;start
  9935.     sub.l d0,d1
  9936.     bls.b noimpl
  9937.     move.l d1,d0        ;length
  9938.     move.l d0,d3
  9939.  
  9940.     sub.l a1,a1
  9941.     move.l d2,d1        ;mode
  9942.     bsr.b doimp
  9943.  
  9944.     lea linebuf+1-base(a6),a0
  9945.     lea impetxt(pc),a1
  9946.     move.l d0,d1
  9947.     beq.b imperr
  9948.     lea impatxt(pc),a1
  9949.     bmi.b imperr
  9950.     lea gaintxt+1(pc),a1
  9951.     bsr txttobuf
  9952.     sub.l d1,d3
  9953.     move.l d3,d0    
  9954.     bsr hextoa_
  9955.     lea impotxt(pc),a1
  9956.     bsr txttobuf
  9957.     move.l para-base(a6),d0
  9958.     add.l d0,d1
  9959.     bsr twolong_
  9960.     bra.b impok
  9961. imperr:    bsr txttobuf
  9962. impok:    bsr rawline
  9963.  
  9964.     st d7
  9965. noimpl:    rts
  9966.  
  9967. ;
  9968. ; implode:
  9969. ;
  9970. ; In:    a0.l=*buffer
  9971. ;    d0.l=data length
  9972. ;    d1.l=crunch mode
  9973. ;
  9974. ; Out:    d0.l=<0:user break; 0:error; <>0:crunched length
  9975. ;
  9976.  
  9977. doimp:
  9978. im00:    movem.l    d2-d7/a2-a6,-(sp)
  9979.     moveq    #$57,d2
  9980. im01:    clr.w    -(sp)
  9981.     dbf    d2,im01
  9982.     move.l    sp,a6
  9983. ;    move.l    a5,2(a6)    ;obsolete
  9984.     cmp.l    #$40,d0
  9985.     blo    im23
  9986.     lsr.l    #8,d1
  9987.     scs    (a6)
  9988.     lsr.l    #8,d1
  9989.     cmp.b    #12,d1
  9990.     blo.s    im02
  9991.     moveq    #0,d1
  9992. im02:
  9993. ;    move.l    a1,6(a6)    ;obsolete
  9994.     move.l    a0,10(a6)
  9995.     move.l    a0,$22(a6)
  9996.     move.l    a0,$26(a6)
  9997.     move.l    d0,$12(a6)
  9998.     add.l    d0,a0
  9999.     move.l    a0,14(a6)
  10000.     lea    imtab0(pc),a0
  10001.     lsl.w    #2,d1
  10002.     move.l    0(a0,d1.w),d1
  10003.     addq.l    #1,d1
  10004.     cmp.l    d0,d1
  10005.     bls.s    im03
  10006.     move.l    d0,d1
  10007.     subq.l    #1,d1
  10008. im03:    move.l    d1,$1A(a6)
  10009.     subq.l    #1,d1
  10010.     moveq    #0,d0
  10011. im04:    cmp.l    (a0)+,d1
  10012.     bls.s    im05
  10013.     addq.b    #1,d0
  10014.     bra.s    im04
  10015. im05:    move.b    d0,1(a6)
  10016.     lea    $A4(a6),a1
  10017.     moveq    #12,d1
  10018.     mulu    d1,d0
  10019.     lea    imtab1(pc),a0
  10020.     add.l    d0,a0
  10021.     subq.w    #1,d1
  10022. im06:    move.b    (a0)+,(a1)+
  10023.     dbf    d1,im06
  10024.     lea    $74(a6),a1
  10025.     lea    $A4(a6),a0
  10026.     moveq    #11,d1
  10027. im07:    move.b    (a0)+,d0
  10028.     moveq    #0,d2
  10029.     bset    d0,d2
  10030.     move.l    d2,(a1)+
  10031.     dbf    d1,im07
  10032.     lea    $74(a6),a0
  10033.     lea    $84(a6),a1
  10034.     moveq    #7,d1
  10035. im08:    move.l    (a0)+,d0
  10036.     add.l    d0,(a1)+
  10037.     dbf    d1,im08
  10038.     tst.b    (a6)
  10039.     beq.s    im11
  10040.     lea    $74(a6),a1
  10041.     moveq    #7,d0
  10042. im09:    move.l    (a1)+,d1
  10043.     move.w    d1,(a2)+
  10044.     dbf    d0,im09
  10045.     lea    $A4(a6),a1
  10046.     moveq    #11,d0
  10047. im10:    move.b    (a1)+,(a2)+
  10048.     dbf    d0,im10
  10049. im11:    move.b    #7,$2D(a6)
  10050. im12:    bsr    im26
  10051.     beq    im22
  10052.     bsr    im28
  10053.     beq.s    im15
  10054.     bsr    im55
  10055.     bne.s    im13
  10056.  
  10057. ;    move.l    $22(a6),a0
  10058. ;    move.l    $26(a6),a1
  10059. ;    move.b    (a0),(a1)
  10060. ;    addq.l    #1,$22(a6)
  10061. ;    addq.l    #1,$26(a6)
  10062. ;    addq.l    #1,$30(a6)
  10063. ;    addq.l    #1,$1E(a6)
  10064. ;    cmp.l    #$4012,$30(a6)
  10065.     lea $1e(a6),a5
  10066.     addq.l #1,(a5)+        ;$1e
  10067.     move.l (a5),a0        ;$22
  10068.     addq.l #1,(a5)+        ;$22
  10069.     move.l (a5),a1        ;$26
  10070.     move.b (a0),(a1)
  10071.     addq.l #1,(a5)        ;$26
  10072.     addq.l #1,$30(a6)    ;$30    
  10073.     cmp.l #$4012,$30(a6)
  10074.     blo.s    im12
  10075.     bra.s    im15
  10076. im13:    move.b    $5C(a6),d0
  10077.     move.l    $60(a6),d1
  10078.     bsr    im37
  10079.     move.b    $5E(a6),d0
  10080.     move.w    $66(a6),d1
  10081.     bsr    im37
  10082.     move.b    $5D(a6),d0
  10083.     move.w    $64(a6),d1
  10084.     cmp.b    #13,d0
  10085.     bne.s    im14
  10086.     move.l    $26(a6),a0
  10087.     move.b    d1,(a0)+
  10088.     move.l    a0,$26(a6)
  10089.     moveq    #5,d0
  10090.     moveq    #$1F,d1
  10091. im14:    bsr    im37
  10092.     moveq    #0,d0
  10093.     move.l d0,$30(a6)    ;clr.l    $30(a6)
  10094.     move.b    $2E(a6),d0
  10095.     add.l    d0,$22(a6)
  10096.     bra    im12
  10097. im15:    bsr    im26
  10098.     beq    im22
  10099.  
  10100. ;    move.l    $22(a6),a0
  10101. ;    move.l    $26(a6),a1
  10102. ;    move.b    (a0),(a1)
  10103. ;    addq.l    #1,$22(a6)
  10104. ;    addq.l    #1,$26(a6)
  10105. ;    addq.l    #1,$30(a6)
  10106. ;    addq.l    #1,$1E(a6)
  10107.  
  10108.     lea $1e(a6),a5
  10109.     addq.l #1,(a5)+        ;$1e
  10110.     move.l (a5),a0        ;$22
  10111.     addq.l #1,(a5)        ;$22
  10112.     move.l (a5)+,d0        ;$22
  10113.     move.l (a5),a1        ;$26
  10114.     move.b (a0),(a1)
  10115.     addq.l #1,(a5)        ;$26
  10116.     addq.l #1,$30(a6)    ;$30
  10117. ;    move.l    $22(a6),d0
  10118.     cmp.l    14(a6),d0
  10119.     bne.s    im15
  10120.     bsr    im26
  10121.     beq    im22
  10122.     tst.b    (a6)
  10123.     bne    im19
  10124.     move.l    $26(a6),d0
  10125.     sub.l    10(a6),d0
  10126.     moveq #12,d1
  10127.     cmp.l d1,d0        ;cmp.l #12,d0
  10128.     blo    im23
  10129.  
  10130.     move.l    $12(a6),d1
  10131.     sub.l    d0,d1
  10132.     moveq #$36,d7
  10133.     cmp.l d7,d1        ;cmp.l    #$36,d1
  10134.     bls    im23
  10135.     move.l    10(a6),a1
  10136.     move.l    $26(a6),a0
  10137.     move.w #$ff00,d7    ;move.l    #$FF00,d7
  10138.     btst    #0,d0
  10139.     beq.s    im16
  10140.     moveq    #0,d7
  10141.     addq.l    #1,d0
  10142.     clr.b    (a0)+
  10143. im16:    move.l    (a1),8(a0)
  10144.     move.l    #ImploderID,(a1)
  10145.     move.l    4(a1),4(a0)
  10146.     move.l    $12(a6),4(a1)
  10147.     move.l    8(a1),(a0)
  10148.     move.l    d0,8(a1)
  10149.     moveq #$2e,d1
  10150.     add.l d1,d0        ;add.l    #$2E,d0
  10151.     move.l    d0,$16(a6)
  10152.     move.l    $30(a6),12(a0)
  10153.     move.b    $2C(a6),d1
  10154.     and.w    #$FE,d1
  10155.     move.b    $2D(a6),d0
  10156.     bset    d0,d1
  10157.     or.w    d7,d1
  10158.     move.w    d1,$10(a0)
  10159.     lea    $74(a6),a1
  10160.     add.w    #$12,a0
  10161.     moveq    #7,d0
  10162. im17:    move.l    (a1)+,d1
  10163.     move.w    d1,(a0)+
  10164.     dbf    d0,im17
  10165.     lea    $A4(a6),a1
  10166.     moveq    #11,d0
  10167. im18:    move.b    (a1)+,(a0)+
  10168.     dbf    d0,im18
  10169.     bra.s    im23
  10170. im19:    move.l    $26(a6),d0
  10171.     sub.l    10(a6),d0
  10172.     move.l    $12(a6),d1
  10173.     sub.l    d0,d1
  10174.     moveq #6,d2
  10175.     cmp.l d2,d1        ;cmp.l    #6,d1
  10176.     bls.s    im23
  10177.     move.b    $2C(a6),d1
  10178.     and.b    #$FE,d1
  10179.     move.b    $2D(a6),d2
  10180.     bset    d2,d1
  10181.     move.l    $26(a6),a0
  10182.     btst    #0,d0
  10183.     beq.s    im20
  10184.     move.b    d1,(a0)+
  10185.     move.l    $30(a6),(a0)
  10186.     bra.s    im21
  10187. im20:    move.l    $30(a6),(a0)+
  10188.     move.b    d1,(a0)
  10189. im21:    addq.l    #5,d0
  10190.     move.l    d0,$16(a6)
  10191.     bra.s    im23
  10192. im22:    moveq    #-1,d0
  10193.     bra.s    im24
  10194. im23:    move.l    $16(a6),d0
  10195. im24:    moveq    #$57,d2
  10196. im25:    clr.w    (sp)+
  10197.     dbf    d2,im25
  10198.     movem.l    (sp)+,d2-d7/a2-a6
  10199.     tst.l    d0
  10200.     rts
  10201.  
  10202. imtab0:    dc.l    128,256,512,1024,1792,3328,5376,9472,20736,37376,67840,67840
  10203. imtab1:    dc.l    $5050505,$5050505,$6060606,$5060707,$6060606,$7070606
  10204.     dc.l    $5060707,$7070707,$8080808,$5060708,$7070808,$8080909
  10205.     dc.l    $6070708,$7080909,$8090A0A,$6070708,$709090A,$80A0B0B
  10206.     dc.l    $6070808,$709090A,$80A0B0C,$6070808,$709090A,$90A0C0D
  10207.     dc.l    $6070708,$709090C,$90A0C0E,$6070809,$7090A0C,$90B0D0F
  10208.     dc.l    $6070808,$70A0B0B,$90C0D10,$6080809,$70B0C0C,$90D0E11
  10209. imtab2:    dc.l    $2060E,$1020304
  10210. imtab3:    dc.l    $1010101,$2030304,$405070E
  10211. imtab4:    dc.l    $20002,$20002,$6000A,$A0012,$16002A,$8A4012
  10212.  
  10213. im26:    lea base(pc),a5
  10214.     tst.w count-base(a5)
  10215.     bne.b impno
  10216.     move.w #10,count-base(a5)
  10217.     bra.b im27
  10218. impno:    rts            ;beq.b abort
  10219.  
  10220. im27:    movem.l d0-d1/a0-a1/a6,-(a7)
  10221.  
  10222.     move.l    14(a6),d0
  10223.     sub.l    $22(a6),d0    ;togo
  10224.     move.l    $22(a6),d1
  10225.     sub.l    $26(a6),d1    ;saved
  10226.  
  10227.     lea base(pc),a6
  10228.     lea linebuf+1-base(a6),a0
  10229.     lea togotxt(pc),a1
  10230.     bsr txttobuf
  10231.     bsr hextoa_
  10232.     bsr txttobuf
  10233.     move.l d1,d0
  10234.     bsr hextoa_
  10235.     bsr rawline
  10236.     bsr csup    
  10237.  
  10238.     bsr stopit
  10239.     movem.l (a7)+,d0-d1/a0-a1/a6
  10240.     rts
  10241.  
  10242. im28:    move.l    $22(a6),a5
  10243.     move.l    14(a6),d4
  10244.     move.l    a5,d0
  10245.     addq.l    #1,d0
  10246.     add.l    $1A(a6),d0
  10247.     cmp.l    d4,d0
  10248.     bls.s    im29
  10249.     move.l    d4,d0
  10250.     move.l    d0,d1
  10251.     sub.l    a5,d1
  10252.     cmp.l    #3,d1
  10253.     bcc.s    im29
  10254.     moveq    #0,d0
  10255.     rts
  10256. im29:    move.l    d0,d5
  10257.     move.l    a5,a2
  10258.     addq.l    #1,a2
  10259.     move.l    a2,a4
  10260.     moveq    #1,d7
  10261.     move.b    (a5),d3
  10262.     lea    $34(a6),a3
  10263. im30:    cmp.b    (a2)+,d3
  10264.     beq.s    im32
  10265.     cmp.b    (a2)+,d3
  10266.     beq.s    im32
  10267.     cmp.b    (a2)+,d3
  10268.     beq.s    im32
  10269.     cmp.b    (a2)+,d3
  10270.     beq.s    im32
  10271.     cmp.b    (a2)+,d3
  10272.     beq.s    im32
  10273.     cmp.b    (a2)+,d3
  10274.     beq.s    im32
  10275.     cmp.b    (a2)+,d3
  10276.     beq.s    im32
  10277.     cmp.b    (a2)+,d3
  10278.     beq.s    im32
  10279.     cmp.b    (a2)+,d3
  10280.     beq.s    im32
  10281.     cmp.b    (a2)+,d3
  10282.     beq.s    im32
  10283.     cmp.b    (a2)+,d3
  10284.     beq.s    im32
  10285.     cmp.b    (a2)+,d3
  10286.     beq.s    im32
  10287.     cmp.b    (a2)+,d3
  10288.     beq.s    im32
  10289.     cmp.b    (a2)+,d3
  10290.     beq.s    im32
  10291.     cmp.b    (a2)+,d3
  10292.     beq.s    im32
  10293.     cmp.b    (a2)+,d3
  10294.     beq.s    im32
  10295.     cmp.l    a2,d5
  10296.     bhi.s    im30
  10297. im31:    moveq    #-1,d0
  10298.     rts
  10299. im32:    cmp.l    a2,d5
  10300.     bls.s    im31
  10301.     move.l    a4,a0
  10302.     move.l    a2,a1
  10303.     cmpm.b    (a0)+,(a1)+
  10304.     bne.s    im30
  10305.     cmpm.b    (a0)+,(a1)+
  10306.     bne.s    im35
  10307.     cmpm.b    (a0)+,(a1)+
  10308.     bne.s    im34
  10309.     move.w    #251,d0
  10310. im33:    cmpm.b    (a0)+,(a1)+
  10311.     dbne    d0,im33
  10312. im34:    cmp.l    d4,a1
  10313.     bls.s    im35
  10314.     move.l    d4,a1
  10315. im35:    move.l    a1,d6
  10316.     sub.l    a2,d6
  10317.     cmp.w    d6,d7
  10318.     bcc.s    im30
  10319.     move.w    d6,d7
  10320.     cmp.w    #8,d6
  10321.     bhi.s    im36
  10322.     tst.b    -2(a3,d6.w)
  10323.     bne    im30
  10324.     move.b    d6,-2(a3,d6.w)
  10325.     move.l    a2,d0
  10326.     sub.l    a5,d0
  10327.     subq.l    #2,d0
  10328.     move.w    d6,d1
  10329.     lsl.w    #2,d1
  10330.     move.l    d0,0(a3,d1.w)
  10331.     bra    im30
  10332. im36:    move.b    d6,7(a3)
  10333.     move.l    a2,d0
  10334.     sub.l    a5,d0
  10335.     subq.l    #2,d0
  10336.     move.l    d0,$24(a3)
  10337.     cmp.b    #$FF,d6
  10338.     bne    im30
  10339.     bra.s    im31
  10340. im37:    move.b    $2C(a6),d2
  10341.     move.b    $2D(a6),d3
  10342.     move.l    $26(a6),a0
  10343. im38:    lsr.l    #1,d1
  10344.     roxr.b    #1,d2
  10345.     subq.b    #1,d3
  10346.     bpl.s    im39
  10347.     moveq    #7,d3
  10348.     move.b    d2,(a0)+
  10349.     moveq    #0,d2
  10350. im39:    subq.b    #1,d0
  10351.     bne.s    im38
  10352.     move.l    a0,$26(a6)
  10353.     move.b    d3,$2D(a6)
  10354.     move.b    d2,$2C(a6)
  10355.     rts
  10356. im40:    and.l    #$FF,d0
  10357.     cmp.b    #13,d0
  10358.     bhi.s    im42
  10359.     cmp.b    #5,d0
  10360.     bhi.s    im41
  10361.     lea    imtab2(pc),a0
  10362.     move.b    -2(a0,d0.w),$71(a6)
  10363.     move.b    2(a0,d0.w),$69(a6)
  10364.     bra.s    im44
  10365. im41:    subq.b    #6,d0
  10366.     or.b    #$F0,d0
  10367.     move.b    d0,$71(a6)
  10368.     move.b    #8,$69(a6)
  10369.     bra.s    im43
  10370. im42:    move.b    #$1F,$70(a6)
  10371.     move.b    d0,$71(a6)
  10372.     move.b    #13,$69(a6)
  10373. im43:    moveq    #5,d0
  10374. im44:    subq.b    #2,d0
  10375.     move.l    $30(a6),d2
  10376.     lea    imtab3(pc),a1
  10377.     lea    imtab4(pc),a0
  10378.     add.l    d0,a0
  10379.     add.l    d0,a0
  10380.     cmp.w    (a0),d2
  10381.     bcc.s    im45
  10382.     move.b    0(a1,d0.w),d6
  10383.     move.b    d6,d3
  10384.     addq.b    #1,d3
  10385.     sf $73(a6)        ;move.b    #0,$73(a6)
  10386.     moveq    #0,d4
  10387.     bra.s    im48
  10388. im45:    cmp.w    8(a0),d2
  10389.     bcc.s    im46
  10390.     move.b    4(a1,d0.w),d6
  10391.     move.b    d6,d3
  10392.     addq.b    #2,d3
  10393.     move.b    #2,$73(a6)
  10394.     move.w    (a0),d4
  10395.     bra.s    im48
  10396. im46:    cmp.w    $10(a0),d2
  10397.     blo.s    im47
  10398.     moveq    #0,d0
  10399.     rts
  10400. im47:    move.b    8(a1,d0.w),d6
  10401.     move.b    d6,d3
  10402.     addq.b    #2,d3
  10403.     move.b    #3,$73(a6)
  10404.     move.w    8(a0),d4
  10405. im48:    move.b    d3,$6A(a6)
  10406.     sub.w    d4,d2
  10407.     moveq    #$10,d5
  10408.     sub.b    d6,d5
  10409.     lsl.w    d5,d2
  10410. im49:    add.w    d2,d2
  10411.     roxl    $72(a6)
  10412.     subq.b    #1,d6
  10413.     bne.s    im49
  10414.     lea    $A4(a6),a1
  10415.     lea    $74(a6),a0
  10416.     add.w    d0,a0
  10417.     add.w    d0,a0
  10418.     add.w    d0,a0
  10419.     add.w    d0,a0
  10420.     cmp.l    (a0),d1
  10421.     bcc.s    im50
  10422.     move.b    0(a1,d0.w),d6
  10423.     move.b    d6,d3
  10424.     addq.b    #1,d3
  10425.     moveq    #0,d7
  10426.     moveq    #0,d4
  10427.     bra.s    im53
  10428. im50:    cmp.l    $10(a0),d1
  10429.     bcc.s    im51
  10430.     move.b    4(a1,d0.w),d6
  10431.     move.b    d6,d3
  10432.     addq.b    #2,d3
  10433.     moveq    #2,d7
  10434.     move.l    (a0),d4
  10435.     bra.s    im53
  10436. im51:    cmp.l    $20(a0),d1
  10437.     blo.s    im52
  10438.     moveq    #0,d0
  10439.     rts
  10440. im52:    move.b    8(a1,d0.w),d6
  10441.     move.b    d6,d3
  10442.     addq.b    #2,d3
  10443.     moveq    #3,d7
  10444.     move.l    $10(a0),d4
  10445. im53:    move.b    d3,$68(a6)
  10446.     sub.l    d4,d1
  10447.     moveq    #$20,d5
  10448.     sub.b    d6,d5
  10449.     lsl.l    d5,d1
  10450. im54:    add.l    d1,d1
  10451.     addx.l    d7,d7
  10452.     subq.b    #1,d6
  10453.     bne.s    im54
  10454.     move.l    d7,$6C(a6)
  10455.     moveq    #-1,d0
  10456.     rts
  10457. im55:    clr.w    $2A(a6)
  10458.     clr.b    $2E(a6)
  10459.     lea    $34(a6),a4
  10460.     lea    $3C(a6),a5
  10461. im56:    move.l    (a5)+,d1
  10462.     move.b    (a4)+,d0
  10463.     beq.s    im58
  10464.     bsr    im40
  10465.     beq.s    im58
  10466.     moveq    #0,d0
  10467.     moveq    #0,d1
  10468.     move.b    -1(a4),d0
  10469.     lsl.w    #3,d0
  10470.     add.b    $69(a6),d1
  10471.     add.b    $68(a6),d1
  10472.     add.b    $6A(a6),d1
  10473.     sub.w    d1,d0
  10474.     bmi.s    im58
  10475.     cmp.w    $2A(a6),d0
  10476.     blo.s    im58
  10477.     move.w    d0,$2A(a6)
  10478.     move.b    -1(a4),$2E(a6)
  10479.     lea    $5C(a6),a0
  10480.     lea    $68(a6),a1
  10481.     moveq    #12,d1
  10482. im57:    move.b    (a1)+,(a0)+
  10483.     dbf    d1,im57
  10484. im58:    move.l    a4,d0
  10485.     sub.l    a6,d0
  10486.     cmp.w    #$3C,d0
  10487.     bne.s    im56
  10488.     clr.l    -(a4)
  10489.     clr.l    -(a4)
  10490.     tst.w    $2E(a6)
  10491.     rts
  10492.  
  10493.  
  10494. explode:subq.l #1,d3
  10495.     bne.b exploq
  10496.     move.l para-base(a6),d0
  10497.     btst #0,d0
  10498.     bne.b exploq
  10499.     move.l d0,a0
  10500.     move.l a0,d2        ;dest
  10501.     move.l 4(a0),d3        ;decrunched length
  10502.  
  10503.     bsr doexp
  10504.     tst.l d0
  10505.     lea linebuf+1-base(a6),a0
  10506.     lea expetxt(pc),a1
  10507.     beq.b experr
  10508.     lea expotxt(pc),a1
  10509.     bsr txttobuf
  10510.     move.l d2,d0
  10511.     move.l d2,d1
  10512.     add.l d3,d1
  10513.     bsr twolong_
  10514.     bra.b expok
  10515. experr:    bsr txttobuf
  10516. expok:    bsr rawline
  10517.     st d7
  10518. exploq:    rts
  10519.  
  10520. ;
  10521. ; explode:
  10522. ;
  10523. ; Die entkomprimierten Daten werden in den gleichen Bereich geschrieben, in
  10524. ; dem die komprimierten Daten stehen (dieser Bereich muß deshalb groß genug sein).
  10525. ;
  10526. ; In:    a0.l=*buffer
  10527. ;
  10528. ; Out:    d0.l=0:Error; -1:Ok
  10529. ;
  10530.  
  10531. doexp:    movem.l    d2-d5/a2-a4,-(sp)
  10532.     move.l    a0,a3
  10533.     move.l    a0,a4
  10534.     cmp.l    #ImploderID,(a0)+
  10535.     bne.s    ex05
  10536.     add.l    (a0)+,a4
  10537.     add.l    (a0)+,a3
  10538.     move.l    a3,a2
  10539.     move.l    (a2)+,-(a0)
  10540.     move.l    (a2)+,-(a0)
  10541.     move.l    (a2)+,-(a0)
  10542.     move.l    (a2)+,d2
  10543.     move.w    (a2)+,d3
  10544.     bmi.s    ex00
  10545.     subq.l    #1,a3
  10546. ex00:    lea    -28(sp),sp
  10547.     move.l    sp,a1
  10548.     moveq    #6,d0
  10549. ex01:    move.l    (a2)+,(a1)+
  10550.     dbf    d0,ex01
  10551.     move.l    sp,a1
  10552.     moveq    #0,d4
  10553. ex02:    tst.l    d2
  10554.     beq.s    ex04
  10555. ex03:    move.b    -(a3),-(a4)
  10556.     subq.l    #1,d2
  10557.     bne.s    ex03
  10558. ex04:    cmp.l    a4,a0
  10559.     blo.s    ex07
  10560.     lea    28(sp),sp
  10561.     moveq    #-1,d0
  10562.     cmp.l    a3,a0
  10563.     beq.s    ex06
  10564. ex05:    moveq    #0,d0
  10565. ex06:    movem.l    (sp)+,d2-d5/a2-a4
  10566.     tst.l    d0
  10567.     rts
  10568. ex07:    add.b    d3,d3
  10569.     bne.s    ex08
  10570.     move.b    -(a3),d3
  10571.     addx.b    d3,d3
  10572. ex08:    bcc.s    ex20
  10573.     add.b    d3,d3
  10574.     bne.s    ex09
  10575.     move.b    -(a3),d3
  10576.     addx.b    d3,d3
  10577. ex09:    bcc.s    ex19
  10578.     add.b    d3,d3
  10579.     bne.s    ex10
  10580.     move.b    -(a3),d3
  10581.     addx.b    d3,d3
  10582. ex10:    bcc.s    ex18
  10583.     add.b    d3,d3
  10584.     bne.s    ex11
  10585.     move.b    -(a3),d3
  10586.     addx.b    d3,d3
  10587. ex11:    bcc.s    ex17
  10588.     add.b    d3,d3
  10589.     bne.s    ex12
  10590.     move.b    -(a3),d3
  10591.     addx.b    d3,d3
  10592. ex12:    bcc.s    ex13
  10593.     move.b    -(a3),d4
  10594.     moveq    #3,d0
  10595.     bra.s    ex21
  10596. ex13:    add.b    d3,d3
  10597.     bne.s    ex14
  10598.     move.b    -(a3),d3
  10599.     addx.b    d3,d3
  10600. ex14:    addx.b    d4,d4
  10601.     add.b    d3,d3
  10602.     bne.s    ex15
  10603.     move.b    -(a3),d3
  10604.     addx.b    d3,d3
  10605. ex15:    addx.b    d4,d4
  10606.     add.b    d3,d3
  10607.     bne.s    ex16
  10608.     move.b    -(a3),d3
  10609.     addx.b    d3,d3
  10610. ex16:    addx.b    d4,d4
  10611.     addq.b    #6,d4
  10612.     moveq    #3,d0
  10613.     bra.s    ex21
  10614. ex17:    moveq    #5,d4
  10615.     moveq    #3,d0
  10616.     bra.s    ex21
  10617. ex18:    moveq    #4,d4
  10618.     moveq    #2,d0
  10619.     bra.s    ex21
  10620. ex19:    moveq    #3,d4
  10621.     moveq    #1,d0
  10622.     bra.s    ex21
  10623. ex20:    moveq    #2,d4
  10624.     moveq    #0,d0
  10625. ex21:    moveq    #0,d5
  10626.     move.w    d0,d1
  10627.     add.b    d3,d3
  10628.     bne.s    ex22
  10629.     move.b    -(a3),d3
  10630.     addx.b    d3,d3
  10631. ex22:    bcc.s    ex25
  10632.     add.b    d3,d3
  10633.     bne.s    ex23
  10634.     move.b    -(a3),d3
  10635.     addx.b    d3,d3
  10636. ex23:    bcc.s    ex24
  10637.     move.b    extab0(pc,d0.w),d5
  10638.     addq.b    #8,d0
  10639.     bra.s    ex25
  10640. ex24:    moveq    #2,d5
  10641.     addq.b    #4,d0
  10642. ex25:    move.b    extab1(pc,d0.w),d0
  10643. ex26:    add.b    d3,d3
  10644.     bne.s    ex27
  10645.     move.b    -(a3),d3
  10646.     addx.b    d3,d3
  10647. ex27:    addx.w    d2,d2
  10648.     subq.b    #1,d0
  10649.     bne.s    ex26
  10650.     add.w    d5,d2
  10651.     moveq    #0,d5
  10652.     move.l    d5,a2
  10653.     move.w    d1,d0
  10654.     add.b    d3,d3
  10655.     bne.s    ex28
  10656.     move.b    -(a3),d3
  10657.     addx.b    d3,d3
  10658. ex28:    bcc.s    ex31
  10659.     add.w    d1,d1
  10660.     add.b    d3,d3
  10661.     bne.s    ex29
  10662.     move.b    -(a3),d3
  10663.     addx.b    d3,d3
  10664. ex29:    bcc.s    ex30
  10665.     move.w    8(a1,d1.w),a2
  10666.     addq.b    #8,d0
  10667.     bra.s    ex31
  10668. ex30:    move.w    0(a1,d1.w),a2
  10669.     addq.b    #4,d0
  10670. ex31:    move.b    $10(a1,d0.w),d0
  10671. ex32:    add.b    d3,d3
  10672.     bne.s    ex33
  10673.     move.b    -(a3),d3
  10674.     addx.b    d3,d3
  10675. ex33:    addx.l    d5,d5
  10676.     subq.b    #1,d0
  10677.     bne.s    ex32
  10678.     addq.w    #1,a2
  10679.     add.l    d5,a2
  10680.     add.l    a4,a2
  10681. ex34:    move.b    -(a2),-(a4)
  10682.     subq.b    #1,d4
  10683.     bne.s    ex34
  10684.     bra    ex02
  10685. extab0:    dc.l    $60A0A12
  10686. extab1:    dc.l    $1010101,$2030304,$405070E
  10687.  
  10688.  
  10689. stopit:    cmp.b #$1b,ascii-base(a6)
  10690.     beq.b stopit0
  10691.     btst #10,$dff016
  10692.     beq.b stopit
  10693.     rts            ;bne.b noquit
  10694. stopit0:clr.w buflen-base(a6)    ;beq.b exitall
  10695.     rts
  10696. waitrmb:cmp.b #$1b,ascii-base(a6)
  10697.     beq.b stopit0
  10698.     btst #10,$dff016
  10699.     bne.b waitrmb
  10700.     move.w #5,count-base(a6)
  10701. waitit1:tst.w count-base(a6)
  10702.     bne.b waitit1
  10703. waitit0:btst #10,$dff016
  10704.     beq.b waitit0
  10705.     rts            ;beq.b exitall
  10706.         
  10707.  
  10708. twolong_:
  10709.     bsr.b longtoa_
  10710.     move.b #"-",(a0)+
  10711.     move.l d1,d0
  10712.     bra.b longtoa_
  10713. twoadr_:bsr.b adrtoa_
  10714.     move.b #"-",(a0)+
  10715.     move.l d1,d0
  10716.     bra.b adrtoa_
  10717. nibtoa_:move.b #"$",(a0)+
  10718. nibtoa:    movem.l d0-d2,-(a7)
  10719.     moveq #1-1,d2
  10720.     ror.l #4,d0
  10721.     bra.b lta0
  10722. bytetoa_:move.b #"$",(a0)+
  10723. bytetoa:movem.l d0-d2,-(a7)
  10724.     moveq #2-1,d2
  10725.     ror.l #8,d0
  10726.     bra.b lta0
  10727. wordtoa_:move.b #"$",(a0)+
  10728. wordtoa:movem.l d0-d2,-(a7)
  10729.     moveq #4-1,d2
  10730.     swap d0
  10731.     bra.b lta0
  10732. adrtoa_:move.b #"$",(a0)+
  10733. adrtoa:    movem.l d0-d2,-(a7)
  10734.     moveq #6-1,d2
  10735.     lsl.l #8,d0
  10736.     bra.b lta0
  10737. longtoa_:move.b #"$",(a0)+
  10738. longtoa:movem.l d0-d2,-(a7)
  10739.     moveq #8-1,d2
  10740. lta0:    rol.l #4,d0
  10741.     moveq #$0f,d1
  10742.     and.w d0,d1
  10743.     move.b l2ascii(pc,d1.w),(a0)+
  10744.     dbf d2,lta0
  10745.     movem.l (a7)+,d0-d2
  10746.     rts
  10747. l2ascii:dc.b "0123456789abcdef"
  10748. hextoa_:movem.l d0-d3,-(a7)
  10749.     moveq #9,d2
  10750.     cmp.l d2,d0
  10751.     bls.b hta3
  10752.     move.b #"$",(a0)+
  10753. hta3:    sf d3
  10754.     moveq #8-1,d2
  10755. hta0:    rol.l #4,d0
  10756.     moveq #$0f,d1
  10757.     and.w d0,d1
  10758.     bne.b hta1
  10759.     tst.w d2
  10760.     beq.b hta1
  10761.     tst.b d3
  10762.     beq.b hta2
  10763. hta1:    st d3
  10764.     move.b l2ascii(pc,d1.w),(a0)+
  10765. hta2:    dbf d2,hta0            
  10766.     movem.l (a7)+,d0-d3
  10767.     rts
  10768. wordtod:move.l d0,-(a7)
  10769.     ext.l d0
  10770.     divu #1000,d0
  10771.     add.b #"0",d0
  10772.     move.b d0,(a0)+
  10773.     clr.w d0
  10774.     swap d0
  10775.     divu #100,d0
  10776.     add.b #"0",d0
  10777.     move.b d0,(a0)+
  10778.     swap d0
  10779.     bra.b btd0
  10780. bytetod:move.l d0,-(a7)
  10781. btd0:    cmp.b #99,d0
  10782.     bls.b btd1
  10783.     moveq #99,d0    
  10784. btd1:    ext.w d0
  10785.     ext.l d0
  10786.     divu #10,d0
  10787.     bra.b ntd1
  10788. nibtod:    move.l d0,-(a7)
  10789.     moveq #%1111,d0
  10790.     and.l (a7),d0
  10791.     divu #10,d0
  10792.     beq.b ntd0
  10793. ntd1:    add.b #"0",d0
  10794.     move.b d0,(a0)+
  10795. ntd0:    swap d0
  10796.     add.b #"0",d0
  10797.     move.b d0,(a0)+
  10798.     move.l (a7)+,d0
  10799.     rts
  10800. hextod:    movem.l d0-d4/a1,-(a7)
  10801.     lea divtab(pc),a1
  10802.     moveq #10-1,d1
  10803.     sf d4
  10804. hd0:    moveq #"0",d2
  10805.     move.l (a1)+,d3
  10806. hd1:    cmp.l d3,d0
  10807.     bcs.b hd2
  10808.     st d4
  10809.     sub.l d3,d0
  10810.     addq.b #1,d2
  10811.     bra.b hd1
  10812. hd2:    tst.w d1
  10813.     beq.b hd4
  10814.     tst.b d4
  10815.     beq.b hd3
  10816. hd4:    move.b d2,(a0)+
  10817. hd3:    dbf d1,hd0
  10818.     movem.l (a7)+,d0-d4/a1
  10819.     rts
  10820. divtab:    dc.l 1000000000,100000000,10000000,1000000
  10821.     dc.l 100000,10000,1000,100,10,1
  10822.  
  10823. hextob:    movem.l d0-d4,-(a7)
  10824.     sf d4
  10825.     bsr.b hb3    
  10826.     bsr.b hb3    
  10827.     bsr.b hb3    
  10828.     st d4
  10829.     bsr.b hb3    
  10830.     movem.l (a7)+,d0-d4
  10831.     rts
  10832. hb3:    rol.l #8,d0
  10833.     move.b d0,d3
  10834.     bne.b hb2
  10835.     tst.b d4
  10836.     beq.b hb4
  10837. hb2:    st d4
  10838. bytetob:moveq #8-1,d2
  10839. hb0:    moveq #"0",d1
  10840.     add.b d3,d3
  10841.     bcc.b hb1
  10842.     moveq #"1",d1
  10843. hb1:    move.b d1,(a0)+
  10844.     dbf d2,hb0
  10845.     move.b #" ",(a0)+
  10846. hb4:    rts
  10847.  
  10848. atolong_:cmp.b #"$",(a3)
  10849.     bne.b atolong
  10850.     addq.w #1,a3
  10851. atolong:moveq #8-1,d2
  10852.     bra.b atob2
  10853. atoword_:cmp.b #"$",(a3)
  10854.     bne.b atoword
  10855.     addq.w #1,a3
  10856. atoword:moveq #4-1,d2
  10857.     bra.b atob2
  10858. atobyte_:cmp.b #"$",(a3)
  10859.     bne.b atobyte
  10860.     addq.w #1,a3
  10861. atobyte:moveq #2-1,d2
  10862. atob2:    moveq #0,d0
  10863. atob1:    move.b (a3),d1
  10864.     cmp.b #"f",d1
  10865.     bhi.b atob3
  10866.     sub.b #"0",d1
  10867.     bcs.b atob3
  10868.     cmp.b #9,d1
  10869.     bls.b atob0
  10870.     cmp.b #"a"-"0",d1
  10871.     bcs.b atob3
  10872.     sub.b #"a"-"0"-10,d1
  10873. atob0:    lsl.l #4,d0
  10874.     or.b d1,d0
  10875.     addq.w #1,a3
  10876.     dbf d2,atob1
  10877. atob3:    tst.l d0
  10878.     rts
  10879. atodnib:moveq #0,d0        ;0-99
  10880.     move.b (a3),d1
  10881.     sub.b #"0",d1
  10882.     bcs.b atdnb0
  10883.     cmp.b #9,d1
  10884.     bhi.b atdnb0
  10885.     addq.w #1,a3
  10886.     move.b d1,d0
  10887.     move.b (a3),d1
  10888.     sub.b #"0",d1
  10889.     bcs.b atdnb0
  10890.     cmp.b #9,d1
  10891.     bhi.b atdnb0
  10892.     addq.w #1,a3
  10893.     mulu #10,d0
  10894.     add.b d1,d0
  10895. atdnb0:    tst.b d0
  10896.     rts
  10897. atodlong:
  10898.     moveq #0,d0
  10899.     moveq #0,d1
  10900.     moveq #10-1,d2
  10901. atol1:    move.b (a3),d1
  10902.     sub.b #"0",d1
  10903.     bcs.b atodl0
  10904.     cmp.b #9,d1
  10905.     bhi.b atodl0
  10906.     addq.w #1,a3
  10907.     add.l d0,d0        ;*2
  10908.     move.l d0,-(a7)
  10909.     lsl.l #2,d0        ;*2*4
  10910.     add.l (a7)+,d0
  10911.     add.l d1,d0
  10912.     dbf d2,atol1
  10913. atodl0:    rts
  10914.  
  10915. dis6502:movem.l d0-d2/a0-a1/a4,-(a7)
  10916.     move.l a5,d2
  10917.     bsr.w clrlbuf
  10918.     lea linebuf-base(a6),a0
  10919.     move.w #">_",(a0)+
  10920.     move.l a5,d0
  10921.     bsr.w longtoa
  10922.  
  10923.     moveq #$ffffffdf,d0
  10924.     and.b (a5),d0
  10925.     cmp.b #$c2,d0
  10926.     bne.b nseprep
  10927.     btst #5,(a5)
  10928.     sne d1
  10929.     
  10930.     moveq #%00110000,d0
  10931.     and.b 1(a5),d0
  10932.     beq.b nseprep
  10933.     move.b 1(a5),d0
  10934.     lea linebuf+40-base(a6),a0
  10935.     move.b #";",(a0)+
  10936.     btst #5,d0
  10937.     beq.b noaccu
  10938.     move.b #"a",(a0)+
  10939.     move.b #":",(a0)+
  10940.     tst.b autosel-base(a6)
  10941.     beq.b noaccu
  10942.     move.b d1,accu8-base(a6)
  10943. noaccu:    btst #4,d0
  10944.     beq.b noindx
  10945.     btst #5,d0
  10946.     beq.b noac0
  10947.     move.b #",",-1(a0)
  10948. noac0:    move.b #"x",(a0)+
  10949.     move.b #",",(a0)+
  10950.     move.b #"y",(a0)+
  10951.     move.b #":",(a0)+
  10952.     tst.b autosel-base(a6)
  10953.     beq.b noindx
  10954.     move.b d1,idxy8-base(a6)
  10955. noindx:    lsl.b #3,d1
  10956.     moveq #16,d0
  10957.     add.b d1,d0
  10958.     bsr.w hextod
  10959.     move.b #"b",(a0)+
  10960.     move.b #"i",(a0)+
  10961.     move.b #"t",(a0)
  10962. nseprep:
  10963.     lea linebuf+25-base(a6),a0
  10964.     moveq #0,d0
  10965.     move.b (a5)+,d0
  10966.     add.w d0,d0
  10967.     lea tab6502(pc),a4
  10968.     add.w d0,a4
  10969.     moveq #0,d1
  10970.     move.b (a4)+,d1
  10971.     mulu #3,d1
  10972.     moveq #0,d0
  10973.     move.b (a4)+,d0
  10974.     lea txt6502(pc),a4
  10975.     add.w d1,a4
  10976.     move.b (a4)+,(a0)+
  10977.     move.b (a4)+,(a0)+
  10978.     move.b (a4)+,(a0)
  10979.     addq.w #2,a0
  10980.     add.w d0,d0
  10981.     move.w d65mode(pc,d0.w),d0
  10982.     jsr d65subs(pc,d0.w)
  10983.     lea linebuf+12-base(a6),a0
  10984.     lea linebuf+70-base(a6),a1
  10985.     move.b #";",(a1)+
  10986.     move.l d2,a4
  10987.     sub.l a5,d2
  10988. d02hex:    move.b (a4)+,d0
  10989.     bsr.w bytetoa
  10990.     moveq #$60,d1
  10991.     and.b d0,d1
  10992.     bne.b d02asc
  10993.     moveq #".",d0
  10994. d02asc:    move.b d0,(a1)+
  10995.     addq.w #1,a0
  10996.     addq.b #1,d2
  10997.     bne.b d02hex
  10998.     movem.l (a7)+,d0-d2/a0-a1/a4
  10999.     rts
  11000. d65mode:dc.w d65nop-d65subs    ;0
  11001.     dc.w d65imi-d65subs    ;1
  11002.     dc.w d65adr-d65subs    ;2
  11003.     dc.w d65zp-d65subs    ;3
  11004.     dc.w d65acu-d65subs    ;4
  11005.     dc.w d65zpix-d65subs    ;5
  11006.     dc.w d65zpiy-d65subs    ;6
  11007.     dc.w d65zpx-d65subs    ;7
  11008.     dc.w d65adrx-d65subs    ;8
  11009.     dc.w d65adry-d65subs    ;9
  11010.     dc.w d65zpy-d65subs    ;10
  11011.     dc.w d65jmpi-d65subs    ;11
  11012.     dc.w d65brel-d65subs    ;12
  11013.     dc.w d65dummy-d65subs    ;13
  11014.     dc.w d65zpl-d65subs    ;14
  11015.     dc.w d65zply-d65subs    ;15
  11016.     dc.w d65zpi-d65subs    ;16
  11017.     dc.w d65srel-d65subs    ;17
  11018.     dc.w d65sriy-d65subs    ;18
  11019.     dc.w d65adlg-d65subs    ;19
  11020.     dc.w d65adlx-d65subs    ;20
  11021.     dc.w d65brlg-d65subs    ;21
  11022.     dc.w d65jpix-d65subs    ;22
  11023.     dc.w d65imac-d65subs    ;23
  11024.     dc.w d65imxy-d65subs    ;24
  11025.  
  11026. d65subs:
  11027. d65adlx:pea d65x(pc)
  11028. d65adlg:moveq #0,d0
  11029.     move.b 2(a5),d0
  11030.     lsl.w #8,d0
  11031.     move.b 1(a5),d0
  11032.     lsl.l #8,d0
  11033.     move.b (a5),d0
  11034.     addq.w #3,a5
  11035.     bra.b d65hex
  11036. d65imxy:tst.b idxy8-base(a6)
  11037.     bra.b d65im
  11038. d65imac:tst.b accu8-base(a6)
  11039. d65im:    beq.b d65imw
  11040. d65imi:    move.b #"#",(a0)+
  11041. d65byte:bra.b d65zp
  11042. d65imw:    move.b #"#",(a0)+
  11043. d65adr:    cmp.b #$20,-1(a5)    ;jsr abs
  11044.     beq.b d65adr2
  11045.     cmp.b #$4c,-1(a5)    ;jmp abs
  11046.     beq.b d65adr2
  11047.     pea dsnesio(pc)        ;comment io reg
  11048. d65adr2:moveq #0,d0
  11049.     move.b 1(a5),d0
  11050.     lsl.l #8,d0
  11051.     move.b (a5),d0
  11052.     addq.w #2,a5
  11053.     bra.b d65hex
  11054. d65zp:    moveq #0,d0
  11055.     move.b (a5)+,d0
  11056. d65hex:    bra.w hextoa_
  11057. d65acu:    move.b #"a",(a0)+
  11058. d65nop:    rts
  11059. d65zpix:move.b #"(",(a0)+
  11060.     bsr.b d65zp
  11061.     bsr.b d65x
  11062. d65brac:move.b #")",(a0)+
  11063.     rts
  11064. d65zpi:    move.b #"(",(a0)+
  11065.     bsr.b d65zp
  11066.     bra.b d65brac
  11067. d65zpiy:bsr.b d65zpi
  11068. d65y:    move.b #",",(a0)+
  11069.     move.b #"y",(a0)+
  11070.     rts
  11071. d65zpx:    bsr.b d65zp
  11072.     bra.b d65x
  11073. d65adrx:bsr.b d65adr
  11074. d65x:    move.b #",",(a0)+
  11075.     move.b #"x",(a0)+
  11076.     rts
  11077. d65adry:bsr.b d65adr
  11078.     bra.b d65y
  11079. d65zpy:    bsr.b d65zp
  11080.     bra.b d65y
  11081. d65jpix:move.b #"(",(a0)+
  11082.     bsr.b d65adr2        ;no io reg comment
  11083.     bsr.b d65x
  11084.     bra.b d65brac
  11085. d65jmpi:move.b #"(",(a0)+
  11086.     bsr.b d65adr2        ;no io reg comment
  11087.     bra.b d65brac
  11088. d65brel:move.b (a5)+,d0
  11089.     ext.w d0
  11090.     ext.l d0
  11091.     add.l a5,d0
  11092.     bra.b d65hex
  11093. d65brlg:move.b 1(a5),d0
  11094.     lsl.w #8,d0
  11095.     move.b (a5),d0
  11096.     addq.w #2,a5
  11097.     ext.l d0
  11098.     add.l a5,d0
  11099.     bra.b d65hex
  11100. ;d65db:    move.b -1(a5),d0    ;dc.b changed to wdm instruction
  11101. ;    bra.w bytetoa_
  11102. d65zply:pea d65y(pc)
  11103. d65zpl:    move.b #"[",(a0)+
  11104.     bsr.w d65zp
  11105.     move.b #"]",(a0)+
  11106. d65dummy:rts
  11107. d65srel:bsr.w d65zp
  11108.     move.b #",",(a0)+
  11109.     move.b #"s",(a0)+
  11110.     rts
  11111. d65sriy:move.b #"(",(a0)+
  11112.     bsr.b d65srel
  11113.     move.b #")",(a0)+
  11114.     bra.w d65y
  11115.  
  11116. dsnesio:movem.l d0-d2/a0-a1,-(a7)
  11117.     move.w d0,d1
  11118.     sf d1
  11119.     cmp.w #$4300,d1        ;dma special
  11120.     bne.b dsnes2
  11121.     move.b d0,d1
  11122.     lsr.b #4,d1
  11123.     add.b #"0",d1
  11124.     and.w #$ff8f,d0        ;xx0x-$xx7x
  11125. dsnes2:    lea snesadr(pc),a1
  11126.     lea snesreg(pc),a0
  11127. dsnes3:    tst.w (a1)
  11128.     bmi.b dsnes0
  11129.     cmp.w (a1)+,d0
  11130.     bcs.b dsnes0
  11131.     cmp.w (a1),d0
  11132.     bls.b dsnes1
  11133.     move.w (a1),d2
  11134.     sub.w -(a1),d2
  11135.     addq.w #1,d2
  11136.     addq.w #4,a1
  11137.     lsl.w #3,d2    ;8chr/entry
  11138.     add.w d2,a0
  11139.     bra.b dsnes3
  11140. dsnes1:
  11141.     sub.w -(a1),d0
  11142.     lsl.w #3,d0
  11143.     lea (a0,d0.w),a1
  11144.     lea linebuf+40-base(a6),a0
  11145.     move.b #";",(a0)+
  11146.     moveq #8-1,d2
  11147. dsnes4:    move.b (a1)+,(a0)+
  11148.     bne.b dsnes5
  11149.     move.b d1,-1(a0)
  11150. dsnes5:    dbf d2,dsnes4
  11151. dsnes0:    movem.l (a7)+,d0-d2/a0-a1
  11152.     rts
  11153.  
  11154. hlbrkpt:movem.l d0/d1/a0,-(a7)
  11155.     lea brkpadr-base(a6),a0
  11156.     moveq #brkpnum-1,d0
  11157.     bsr.b matchit
  11158.     bpl.b hlit0
  11159.  
  11160.     lea mtchbuf-base(a6),a0
  11161.     move.w #mtchnum-1,d0
  11162.     bsr.b matchit
  11163. ;    bpl.b hlit0
  11164.  
  11165. hlit0:    movem.l (a7)+,d0/d1/a0
  11166.     rts
  11167.  
  11168. matchit:
  11169. hlbp1:    move.l (a0)+,d1
  11170.     beq.b hlbp0
  11171.     cmp.l hililow-base(a6),d1
  11172.     bcs.b hlbp0
  11173.     cmp.l hiliupp-base(a6),d1
  11174.     bcc.b hlbp0
  11175.     st hilight-base(a6)
  11176.     bra.b hlbp2
  11177. hlbp0:    dbf d0,hlbp1
  11178. hlbp2:    tst.w d0    ;bpl.b matched
  11179.     rts
  11180.  
  11181. bufaddr:movem.l d0/d1/a0,-(a7)
  11182.     lea mtchbuf-base(a6),a0
  11183.     move.w #mtchnum-1,d0
  11184. bufadr0:move.l (a0)+,d1
  11185.     bne.b bufadr1
  11186.     move.l d6,-(a0)
  11187.     bra.b bufadr2
  11188. bufadr1:cmp.l d6,d1
  11189.     dbeq d0,bufadr0
  11190. bufadr2:movem.l (a7)+,d0/d1/a0
  11191.     rts
  11192.  
  11193. match:    lea linebuf-base(a6),a4
  11194.     lea mtchbuf-base(a6),a1
  11195.     subq.l #1,d3
  11196.     bmi.b match0
  11197.     bne.b matchq
  11198.     tst.l para-base(a6)
  11199.     bne.b matchq
  11200.     move.l a1,a0
  11201.     move.w #mtchnum-1,d0
  11202. match5:    clr.l (a0)+
  11203.     dbf d0,match5
  11204.  
  11205. match0:    move.l a4,a0
  11206.     lea 70(a0),a2
  11207.     move.w #mtchnum-1,d2
  11208. match1:    move.l (a1)+,d0
  11209.     beq.b match2
  11210.     addq.w #1,a0
  11211.     bsr longtoa_
  11212.     cmp.l a2,a0
  11213.     bls.b match2
  11214.     bsr rawline
  11215. match2:    dbf d2,match1
  11216.     cmp.l a0,a4
  11217.     beq.b match3
  11218.     bsr rawline
  11219. match3:    st d7
  11220. matchq:    rts
  11221.  
  11222. disasm:    movem.l d0-d7/a0-a4/a6,-(a7)    ;yo, funky again...
  11223.     lea instr(pc),a4    ;a5:pc
  11224.     move.l a5,d6
  11225.     move.l a5,hililow-base(a6)
  11226. dis2:    moveq #xchars/4-1,d0        ;redis
  11227.     lea linebuf-base(a6),a0
  11228.     move.l #"    ",d1    ;fill linebuf
  11229. dis3:    move.l d1,(a0)+
  11230.     dbf d0,dis3
  11231.     sf ea2nd-base(a6)        ;begin with 1st eapos
  11232.     move.l d6,a5
  11233.     move.w (a5)+,d1        ;instr.w
  11234. dis0:    move.w d1,d0
  11235.     and.w (a4)+,d0        ;mask
  11236.     cmp.w (a4),d0        ;instrframe
  11237.     lea 14-2(a4),a4
  11238.     bne.b dis0        ;scan instr
  11239.     move.w 4-14(a4),d2        ;info.w
  11240.     move.l d6,d0
  11241.     lea linebuf-base(a6),a0
  11242.     move.w #">,",(a0)+
  11243.     bsr.w longtoa
  11244.     addq.w #1,a0
  11245.  
  11246.     lea -14+6(a4),a1
  11247. dis1:    move.b (a1)+,(a0)+
  11248.     bpl.b dis1
  11249.     bclr #7,-1(a0)        ;end
  11250.  
  11251.     st d7
  11252.     move.w d2,d4
  11253.     and.w #$ff00,d4        ;sizeopt
  11254.     cmp.w #s67,d4
  11255.     bne.b nos67
  11256.     bsr.w size67
  11257. nos67:    cmp.w #s9a_,d4
  11258.     bne.b nos9a_
  11259.     bsr.w size9a_
  11260. nos9a_:    cmp.w #s9a,d4
  11261.     bne.b nos9a
  11262.     bsr.w size9a
  11263. nos9a:    cmp.w #s6,d4
  11264.     bne.b nos6
  11265.     bsr.w size6
  11266. nos6:    cmp.w #s8,d4
  11267.     bne.b nos8
  11268.     bsr.w size8
  11269. nos8:    cmp.w #stab,d4
  11270.     bne.b nostab
  11271.     bsr.w opspos
  11272. nostab:    ;cmp.w #snop,d4
  11273.     ;bne.b nosnop
  11274. nosnop:
  11275.     lea disoffs(pc),a1
  11276.     ext.w d2        ;clr sizeopt
  11277.     add.w d2,d2
  11278.     move.w (a1,d2.w),d2
  11279.     move.l d6,-(a7)
  11280.     jsr dissubs(pc,d2.w)        ;no d7,a4
  11281.     move.l (a7)+,d6
  11282.     tst.b d7
  11283.     beq.w dis2
  11284.  
  11285.     move.l a5,hiliupp-base(a6)
  11286.     movem.l (a7)+,d0-d7/a0-a4/a6
  11287.     rts
  11288.  
  11289. dissubs:
  11290. opfail=*-dissubs
  11291.     moveq #-1,d0
  11292. opf0:    move.w d0,$dff180
  11293.     dbf d0,opf0
  11294. noops=*-dissubs
  11295.     rts    
  11296.  
  11297. dcwop=*-dissubs
  11298.     move.w d1,d0
  11299.     bra.w wordtoa_
  11300.  
  11301. eatoccr=*-dissubs
  11302.     sf imsize-base(a6)
  11303.     bsr.w doea
  11304.     bra.w optoccr
  11305.  
  11306. eatosr=*-dissubs
  11307.     move.b #1,imsize-base(a6)
  11308.     bsr.w doea
  11309.     bra.w optosr
  11310.  
  11311. ccrtoea=*-dissubs
  11312.     bsr.w opccr
  11313.     bra.b dissrea
  11314. srtoea=*-dissubs
  11315.     bsr.w opsr
  11316. dissrea:bra.w dotoea
  11317.  
  11318. fpufmt2:dc.b "lsxpwdbp"
  11319. dfmvmem:lea movetxt+1(pc),a1    ;fmove
  11320.     bsr txttobuf
  11321.     move.b #".",(a0)+
  11322.     move.w d6,d0
  11323.     rol.w #6,d0
  11324.     and.w #%111,d0
  11325.     move.b fpufmt2(pc,d0.w),(a0)+
  11326.     bsr opspos
  11327.     moveq #%111000,d2
  11328.     and.w d1,d2
  11329.     bne.b no2dreg        ;dn ?
  11330.     tst.b d0    ;%000.l
  11331.     beq.b no2dreg
  11332.     subq.b #1,d0    ;%001.s
  11333.     beq.b no2dreg    
  11334.     subq.b #3,d0    ;%100.w
  11335.     beq.b no2dreg
  11336.     subq.b #2,d0    ;%110.b
  11337.     bne.b dmvfail
  11338. no2dreg:cmp.b #%001000,d2    ;an ?
  11339.     beq.b dmvfail
  11340.     moveq #%01111111,d5
  11341.     and.w d6,d5        ;k factor
  11342.     moveq #1,d3        ;static k
  11343.     subq.b #%011,d0        ;p{#k}
  11344.     beq.b dfmvk0
  11345.     moveq #2,d3        ;dynamic k
  11346.     subq.b #%111-%011,d0    ;p{dn}
  11347.     beq.b dfmvk0
  11348.     tst.b d5
  11349.     bne.b dmvfail        ;k factor>0 ?
  11350.     moveq #0,d3        ;no k factor
  11351. dfmvk0:    move.w d6,d0
  11352.     lsr.w #7,d0
  11353.     and.w #%111,d0
  11354.     bsr.w dfp5        ;fpn
  11355.     bsr dotoea
  11356.     subq.b #1,d3        ;k factor ?
  11357.     bmi.b dfmvk1
  11358.     move.b #"{",(a0)+
  11359.     tst.b d3        ;static ?
  11360.     beq.b dfmvkp0
  11361.     moveq #%1111,d0
  11362.     and.b d5,d0
  11363.     bne.b dmvfail        ;unused bits
  11364.     move.b #"d",(a0)+
  11365.     lsr.b #4,d5 
  11366.     bra.b dfmvkp
  11367. dfmvkp0:move.b #"#",(a0)+
  11368.     btst #6,d5
  11369.     beq.b dfmvkp
  11370.     bset #7,d5
  11371.     neg.b d5
  11372.     move.b #"-",(a0)+
  11373. dfmvkp:    move.l d5,d0
  11374.     bsr.w hextod
  11375.     move.b #"}",(a0)+
  11376. dfmvk1:    rts
  11377. dmvfail:bra fail
  11378.  
  11379. dfpu=*-dissubs
  11380.     move.w (a5)+,d6        ;fpu extension word
  11381.     move.w #$e000,d0
  11382.     and.w d6,d0
  11383.     cmp.w #$6000,d0
  11384.     beq.w dfmvmem
  11385.     move.w #$a000,d0
  11386.     and.w d6,d0
  11387.     bne.b dffail
  11388.     btst #14,d6        ;r/m
  11389.     bne.b dfp0
  11390.     tst.b d1        ;ea field=0?
  11391.     bne.b dffail
  11392. dfp0:    lea fpuinst(pc),a1
  11393.     moveq #%01111111,d0
  11394.     and.w d6,d0
  11395. dfp2:    move.b (a1)+,d2
  11396.     bclr #7,d2
  11397.     sne d3        ;0:fp0,ff:fp0,fp0
  11398.     moveq #%01111000,d4
  11399.     and.b d6,d4
  11400.     cmp.b #%00110000,d4    ;sincos
  11401.     seq d4
  11402.     beq.b dfp1
  11403.     cmp.b d2,d0
  11404.     beq.b dfp1
  11405.     addq.w #6,a1
  11406.     tst.b (a1)
  11407.     bne.b dfp2        
  11408. dffail:    sf d7
  11409.     rts
  11410. fpufmt:    dc.b "lsxpwdb*"
  11411. fpuims:    dc.b %010,%010,%110,%110,%001,%100,%000,-1
  11412. dfp1:    bsr.w txttobuf
  11413.     move.b #".",(a0)+
  11414.     move.w d6,d0
  11415.     rol.w #6,d0
  11416.     and.w #%111,d0
  11417.     btst #14,d6
  11418.     beq.b dfp3
  11419.     cmp.w #%111,d0
  11420.     beq.b dffail
  11421.     move.b fpufmt(pc,d0),(a0)+         
  11422.     move.b fpuims(pc,d0.w),imsize-base(a6)
  11423.     bsr.w opspos
  11424.     moveq #%111000,d2
  11425.     and.w d1,d2    ;src:datareg?
  11426.     bne.b dfp8
  11427.     tst.b d0    ;%000.l
  11428.     beq.b dfp8
  11429.     subq.b #1,d0    ;%001.s
  11430.     beq.b dfp8    
  11431.     subq.b #3,d0    ;%100.w
  11432.     beq.b dfp8
  11433.     subq.b #2,d0    ;%110.b
  11434.     bne.b dffail
  11435. dfp8:    cmp.b #%001000,d2    ;an
  11436.     beq.b dffail
  11437.     bsr.w doea    ;imsize!!!
  11438.     st d0        ;dest fpureg
  11439.     sf d3
  11440.     bra.b dfp6
  11441. dfp3:    move.b #"x",(a0)+
  11442.     bsr.w opspos
  11443.     bsr.b dfp5
  11444. dfp6:    moveq #%01111111,d2
  11445.     and.w d6,d2
  11446.     cmp.b #%00111010,d2
  11447.     bne.b dftst
  11448.     and.w #$0380,d6        ;ftst:dst=0
  11449.     bne.w fail
  11450.     rts
  11451. dftst:    tst.b d4
  11452.     beq.b dsncs
  11453.     moveq #%111,d2
  11454.     and.w d6,d2
  11455.     bsr.b dfp7
  11456.     move.b #":",(a0)+
  11457.     move.w d6,d0
  11458.     lsr.w #7,d0
  11459.     and.w #%111,d0
  11460.     bra.b dfp5
  11461. dsncs:    move.w d6,d2
  11462.     lsr.w #7,d2
  11463.     and.w #%111,d2
  11464.     tst.b d3
  11465.     bne.b dfp7    ;show fp0,fp0
  11466.     cmp.b d0,d2
  11467.     beq.b dfp4
  11468. dfp7:    move.w d2,d0
  11469.     move.b #",",(a0)+
  11470. dfp5:    move.b #"f",(a0)+
  11471.     move.b #"p",(a0)+
  11472.     moveq #"0",d2
  11473.     add.b d0,d2
  11474.     move.b d2,(a0)+    
  11475. dfp4:    rts            
  11476.  
  11477. dfmovemx=*-dissubs
  11478.     move.w #$c700,d0
  11479.     and.w (a5),d0
  11480.     cmp.w #$c000,d0        ;fmovem fpx?
  11481.     bne.w fail
  11482.     move.w (a5)+,d3
  11483.     btst #13,d3
  11484.     bne.b dfmovm1
  11485.     bsr doea
  11486.     move.b #",",(a0)+
  11487.     bra dofprx
  11488. dfmovm1:bsr dofprx
  11489.     bra dotoea
  11490. dfmoveml=*-dissubs
  11491.     st d5
  11492.     bra.b dfmovem
  11493.  
  11494. dfmovel=*-dissubs
  11495.     sf d5            ;no fmovem
  11496. dfmovem:move.w #$c3ff,d0
  11497.     and.w (a5),d0
  11498.     cmp.w #$8000,d0
  11499.     bne.w fail
  11500.     move.b #%010,imsize-base(a6)    ;long
  11501.     move.w (a5)+,d6
  11502.     eor.w d0,d6
  11503.     btst #10,d6
  11504.     sne d4
  11505.     btst #11,d6
  11506.     sne d0
  11507.     add.b d0,d4
  11508.     btst #12,d6
  11509.     sne d0
  11510.     add.b d0,d4        ;singleflag:0:0,-1:1,-2:2,-3:3
  11511.     beq.w fail        ;0 fpcr
  11512.     moveq #%111000,d0
  11513.     and.w d1,d0        ;Dn?
  11514.     bne.b nofdreg
  11515.     cmp.b #-1,d4        ;1 fpcr?
  11516.     bne.w fail
  11517. nofdreg:subq.w #%001000,d0    ;An?
  11518.     bne.b nofareg
  11519.     cmp.b #-1,d4        ;1 fpcr?
  11520.     bne.w fail    
  11521.     btst #10,d6        ;fpcr=fpiar?
  11522.     beq.w fail
  11523. nofareg:bclr #13,d6
  11524.     beq.b tofpcr
  11525.     bsr.b dofpcr
  11526.     bra dotoea        
  11527. tofpcr:    bsr doea
  11528.     move.b #",",(a0)+
  11529. dofpcr:    move.b #"f",(a0)+
  11530.     move.b #"p",(a0)+
  11531.     moveq #"c",d0
  11532.     bclr #12,d6
  11533.     bne.b fpcr0
  11534.     moveq #"s",d0
  11535.     bclr #11,d6
  11536.     bne.b fpcr0
  11537.     move.b #"i",(a0)+
  11538.     moveq #"a",d0
  11539.     bclr #10,d6
  11540.     beq.w fail
  11541. fpcr0:    move.b d0,(a0)+
  11542.     move.b #"r",(a0)+
  11543.     tst.w d6
  11544.     beq.b fpsingl
  11545.     tst.b d5        ;fmovem?
  11546.     beq.w fail
  11547.     move.b #"/",(a0)+
  11548.     bra.b dofpcr
  11549. fpsingl:rts
  11550.  
  11551. dfmovecr=*-dissubs
  11552.     move.w (a5),d0
  11553.     and.w #$fc40,d0
  11554.     cmp.w #$5c00,d0    
  11555.     bne.w fail
  11556.     moveq #$003f,d0
  11557.     and.w (a5),d0
  11558.     move.w d0,d1
  11559.     beq.b dfmk1x
  11560.     cmp.b #$30,d0
  11561.     bcc.w dfmk3x
  11562.     cmp.b #$0f,d0
  11563.     bhi.w fail
  11564.     cmp.b #$0b,d0
  11565.     bcs.w fail
  11566.     sub.b #$0b-1,d1
  11567.     bra.b dfmk1x
  11568. dfmk3x:    sub.b #$30-($0f-$0b)-2,d1
  11569. dfmk1x:    move.b #"#",(a0)+
  11570.     bsr.w hextoa_
  11571.     move.w (a5)+,d0
  11572.     bsr.w optofpx79
  11573.     lea linebuf+40-base(a6),a0
  11574.     move.b #";",(a0)+
  11575.     lea fmconst(pc),a1
  11576.     cmp.b #10,d1    ;Pi..100
  11577.     bls.b skipcr
  11578.     bsr.b dfmk0
  11579.     moveq #0,d0
  11580.     sub.b #9,d1    ;1E4..1E4096
  11581.     bset d1,d0
  11582.     bra.w hextod
  11583. skipcr:    tst.b (a1)+
  11584.     bpl.b skipcr
  11585.     dbf d1,skipcr
  11586. dfmk0:    bra.w txttobuf
  11587.     
  11588. dpccodewordrel=*-dissubs
  11589.     moveq #-16,d0        ;$fff0 16 mmu ccodes
  11590.     and.w (a5),d0
  11591.     bne.w fail
  11592.     move.w (a5)+,d0
  11593.     bsr.w dopcc
  11594.     bra.b dfcc0
  11595. dfccodewordrel=*-dissubs
  11596.     moveq #-32,d0        ;$ffe0 32 fpu ccodes
  11597.     and.w (a5),d0
  11598.     bne.w fail
  11599.     move.w (a5)+,d0
  11600.     bsr.w dofcc
  11601. dfcc0:    bsr.w opspos
  11602.     bsr.w opdx02
  11603.     move.b #",",(a0)+
  11604.     move.w (a5)+,d0
  11605.     lea -2(a5,d0.w),a1    ;instrlen:4bytes (oma bug)
  11606.     bra.b wbx2
  11607. ccodewordrel=*-dissubs
  11608.     move.w d1,d0
  11609.     bsr.w docc
  11610. wbx4:    bsr.w opspos
  11611.     bsr.w opdx02
  11612.     move.b #",",(a0)+
  11613.     bra.b wbx3
  11614. wordcc=*-dissubs
  11615.     move.w d1,d0
  11616.     bsr.w docc
  11617. wordcc0:bsr.w chr2buf
  11618.     dc.w ".w"        ;bxx.w
  11619.     bsr.w opspos
  11620. wordbxx=*-dissubs
  11621. wbx3:    move.w (a5)+,d0
  11622.     lea -2(a5,d0.w),a1
  11623. wbx2:    move.l a1,d0
  11624.     bra.w hextoa_            ;bra.w longtoa_
  11625. longcc=*-dissubs
  11626.     move.w d1,d0
  11627.     bsr.w docc
  11628. longcc0:bsr.w chr2buf
  11629.     dc.w ".l"        ;bxx.l
  11630.     bsr.w opspos
  11631. longbxx=*-dissubs
  11632.     move.l (a5)+,d0
  11633.     lea -4(a5,d0.l),a1
  11634.     bra.b wbx2
  11635.     
  11636. shortcc=*-dissubs
  11637.     move.w d1,d0
  11638.     bsr.w docc
  11639.     bsr.w chr2buf
  11640.     dc.w ".b"
  11641.     bsr.w opspos
  11642. shortbxx=*-dissubs
  11643.     move.b d1,d0
  11644.     ext.w d0
  11645.     lea (a5,d0.w),a1
  11646.     bra.b wbx2
  11647.  
  11648. dbrapcc=*-dissubs
  11649.     move.w d1,d0
  11650.     bsr.w dopcc
  11651.     bra.b dbra0
  11652. dbrafcc=*-dissubs
  11653.     move.w d1,d0
  11654.     bsr.w dofcc
  11655. dbra0:    btst #6,d1
  11656.     beq.b wordcc0
  11657.     bra.b longcc0
  11658.         
  11659. eatoax=*-dissubs
  11660.     bsr.w doea
  11661.     bra.w optoax9b
  11662.  
  11663. ea2todx=*-dissubs
  11664.     move.b #2,imsize-base(a6)    ;68020:chk.l #i.l,<ea>
  11665.     bra.b ea2dx
  11666. eatodx=*-dissubs
  11667.     move.b #1,imsize-base(a6)
  11668. ea2dx:
  11669. size67eatodx=*-dissubs
  11670.     bsr.w doea
  11671.     bra.w optodx9b
  11672.  
  11673. dxtoea=*-dissubs        ;no im possible
  11674.     bsr.w opdx9b
  11675.     move.w #$f1c0,d0
  11676.     and.w d1,d0
  11677.     cmp.w #$0100,d0        ;btst: pcrel allowed
  11678.     beq.b dxtea0
  11679.     bra.w dotoea
  11680.  
  11681. dxtea0:    move.b #",",(a0)+
  11682.     bra.w doea
  11683.  
  11684. iwordtoccr=*-dissubs
  11685.     move.b #"#",(a0)+        ;8/16?
  11686.     moveq #0,d0
  11687.     move.b (a5)+,d0
  11688.     bne.w fail
  11689.     move.b (a5)+,d0
  11690.     bsr.w hextoa_            ;bsr.w bytetoa_
  11691.     bra.w optoccr
  11692.  
  11693. iwordtosr=*-dissubs
  11694.     bsr.b iwrd
  11695.     bra.w optosr
  11696.  
  11697. toiword:move.b #",",(a0)+
  11698. iword=*-dissubs
  11699. iwrd:    move.b #"#",(a0)+
  11700.     moveq #0,d0
  11701.     move.w (a5)+,d0
  11702.     bra.w hextoa_            ;bra.w wordtoa_
  11703.  
  11704. dlpstop=*-dissubs
  11705.     cmp.w #$01c0,(a5)+
  11706.     beq.b iwrd
  11707.     bra.w fail      
  11708. dtbl=*-dissubs
  11709.     move.w (a5),d0
  11710.     and.w #$8238,d0
  11711.     bne.w fail
  11712.     move.w (a5),d0
  11713.     moveq #"s",d3
  11714.     btst #11,d0
  11715.     bne.b dtbls
  11716.     moveq #"u",d3
  11717. dtbls:    move.b d3,(a0)+
  11718.     btst #10,d0
  11719.     beq.b dtblr
  11720.     move.b #"n",(a0)+
  11721. dtblr:    bsr.w siz67d0        ;sets imsize,del:d0
  11722.     move.w (a5)+,d3
  11723.     btst #8,d3        ;datareg|eamode
  11724.     beq.b dtbldat
  11725.     moveq #%111111,d0    
  11726.     and.w d3,d0
  11727.     bne.w fail    
  11728.     bsr.w doea
  11729.     bra.b dtblreg    
  11730. dtbldat:bsr.w opdx02
  11731.     move.b #":",(a0)+
  11732.     move.b #"d",(a0)+
  11733.     move.w d3,d0
  11734.     bsr.w op0xx02    
  11735. dtblreg:move.w d3,d0
  11736.     rol.w #4,d0
  11737.     move.b #",",(a0)+
  11738.     move.b #"d",(a0)+
  11739.     bra.w op0xx02
  11740.  
  11741. inibtoea=*-dissubs
  11742.     move.b #"#",(a0)+
  11743.     move.w (a5)+,d0
  11744.     and.l #%11111,d0        ;#0-31(7)
  11745.     bsr.w hextod
  11746.     move.w #$ffc0,d0
  11747.     and.w d1,d0
  11748.     cmp.w #$0800,d0        ;btst: pcrel allowed
  11749.     beq.b inibea0
  11750.     bra.w dotoea
  11751.  
  11752. inibea0:move.b #",",(a0)+
  11753.     bra.w doea
  11754. dpccodeea=*-dissubs
  11755.     moveq #-16,d0
  11756.     and.w (a5),d0
  11757.     bne.w fail
  11758.     move.w (a5)+,d0
  11759.     bsr.w dopcc
  11760.     bra.b ccode0
  11761. fccodeea=*-dissubs
  11762.     moveq #-32,d0
  11763.     and.w (a5),d0
  11764.     bne.w fail
  11765.     move.w (a5)+,d0
  11766.     bsr.w dofcc
  11767.     bra.b ccode0
  11768. ccodeea=*-dissubs
  11769.     move.w d1,d0
  11770.     bsr.w docc
  11771. ccode0:    bsr.w opspos
  11772. srcea=*-dissubs
  11773.     bra.w doea
  11774. imoves=*-dissubs
  11775.     move.w (a5)+,d3
  11776.     move.w #$07ff,d0
  11777.     and.w d3,d0
  11778.     bne.w fail
  11779.     bclr #11,d3
  11780.     bne.b mvsrx
  11781.     bsr.w doea
  11782.     move.b #",",(a0)+
  11783.     bra.w mvcrxcf
  11784. mvsrx:    bsr.w mvcrxcf
  11785.     bra.w dotoea        
  11786.  
  11787. size67ixtoea=*-dissubs
  11788.     bsr.w immediate
  11789.     bra.w dotoea
  11790.  
  11791. size67i9btoea=*-dissubs
  11792.     bsr.w opi9b
  11793.     bra.w dotoea
  11794.  
  11795. size67x9btodx02=*-dissubs
  11796.     btst #5,d1
  11797.     beq.b shi9b
  11798.     bsr.w opdx9b
  11799.     bra.b shdx9b
  11800. shi9b:    bsr.w opi9b
  11801. shdx9b:    bra.w optodx02
  11802.  
  11803. itrap=*-dissubs
  11804.     move.b #"#",(a0)+
  11805.     move.w d1,d0
  11806.     bra.w nibtod
  11807.  
  11808. srcdx02=*-dissubs
  11809.     bra.w opdx02
  11810.  
  11811. imusp=*-dissubs
  11812.     btst #3,d1
  11813.     beq.b imusp0
  11814.     bsr.w opusp
  11815.     bra.w optoax02
  11816. imusp0:    bsr.w opax02
  11817.     bra.w optousp
  11818.  
  11819. dpmovefd=*-dissubs            ;68030mmu only
  11820.     move.w (a5),d0
  11821.     cmp.w #$4100,d0            ;40:tc
  11822.     beq.w dpmvfd
  11823.     eor.w #%0000100100000000,d0    ;08:tt0,0c:tt1,48:srp,4c:crp
  11824.     and.w #%1011101111111111,d0
  11825.     bne.w fail
  11826.     bra.b dpmvfd    ;bit9=0
  11827. dpmove=*-dissubs
  11828.     move.w #$01ff,d0
  11829.     and.w (a5),d0
  11830.     bne.w fail
  11831. dpmvfd:    move.w (a5)+,d3
  11832.     bclr #8,d3    ;pmovefd bit
  11833.     bclr #9,d3
  11834.     bne.b pmvtoea
  11835.     bsr.w doea
  11836.     move.b #",",(a0)+
  11837.     bra.b pmvreg
  11838. pmvtoea:bsr.b pmvreg
  11839.     bra.w dotoea
  11840. pmvreg:    lea pregs(pc),a1
  11841.     lsr.w #8,d3
  11842. pmvlp:    move.b (a1)+,d0
  11843.     beq.w fail
  11844.     cmp.b d3,d0
  11845.     beq.b pmvfnd
  11846. pmvscan:btst #7,(a1)+
  11847.     beq.b pmvscan
  11848.     bra.b pmvlp
  11849. pmvfnd:    bra.w txttobuf
  11850. didbcac=*-dissubs    ;68040
  11851. didb0:    lsr.w #6,d1
  11852.     moveq #3,d0
  11853.     and.w d1,d0
  11854.     move.b idctx(pc,d0.w),(a0)+
  11855.     move.b #"c",(a0)+
  11856.     rts    
  11857. idctx:    dc.l "ndib"    ;nc,dc,ic,bc
  11858. didbind=*-dissubs
  11859.     move.w d1,-(a7)
  11860.     bsr.b didb0
  11861.     move.w (a7)+,d1
  11862.     bra.w toaindirect
  11863. dpflush40=*-dissubs        ;pflush,ptestr,ptestw
  11864.     bra.w aindirect
  11865.  
  11866. imovec=*-dissubs
  11867.     move.w (a5)+,d3
  11868.     btst #0,d1
  11869.     bne.b toctrl
  11870.     bsr.b mvcregs
  11871.     move.b #",",(a0)+
  11872.     bra.b mvcrxcf
  11873. toctrl:    bsr.b mvcrxcf
  11874.     move.b #",",(a0)+
  11875. mvcregs:lea cregs(pc),a1
  11876.     move.w d3,d1
  11877.     and.w #$0fff,d1
  11878. nxtctrl:cmp.w (a1),d1
  11879.     beq.b mvcctrl
  11880.     tst.w (a1)
  11881.     addq.w #6,a1
  11882.     bne.b nxtctrl    
  11883.     bra.w fail
  11884. mvcctrl:addq.w #2,a1
  11885.     move.b (a1)+,(a0)+
  11886.     move.b (a1)+,(a0)+
  11887.     tst.b (a1)
  11888.     beq.b ctrl3ch
  11889.     move.b (a1)+,(a0)+
  11890.     tst.b (a1)
  11891.     beq.b ctrl3ch
  11892.     move.b (a1),(a0)+
  11893. ctrl3ch:rts
  11894. mvcrxcf:move.w d3,d0        ;movec,moves
  11895. dbfireg:and.w #$f000,d0        ;bitfield
  11896.     rol.w #4,d0
  11897. dbytreg:add.b #"0",d0
  11898.     move.b #"a",(a0)+
  11899.     bclr #3,d0
  11900.     bne.b mvcax 
  11901.     addq.b #"d"-"a",-1(a0)
  11902. mvcax:    move.b d0,(a0)+
  11903.     rts
  11904. dbfieldtodx=*-dissubs
  11905.     move.w (a5)+,d2
  11906.     btst #15,d2
  11907.     bne.w fail
  11908.     bsr.b dbfi3
  11909.     move.b #",",(a0)+
  11910.     move.w d2,d0
  11911.     bra.b dbfireg
  11912. ddxtobfield=*-dissubs
  11913.     move.w (a5),d0
  11914.     btst #15,d0
  11915.     bne.w fail
  11916.     bsr.b dbfireg
  11917.     move.b #",",(a0)+
  11918.     move.w (a5)+,d2
  11919.     bra.b dbfi3
  11920. dbfield=*-dissubs
  11921.     move.w (a5)+,d2
  11922.     move.w d2,d0
  11923.     and.w #$f000,d0
  11924.     bne.w fail
  11925. dbfi3:    bsr.w doea
  11926.     move.b #"{",(a0)+
  11927.     move.w d2,d0
  11928.     lsr.w #6,d0
  11929.     bsr.b dbfi2
  11930.     move.b #":",(a0)+
  11931.     move.w d2,d0
  11932.     bsr.b dbfi2
  11933.     move.b #"}",(a0)+
  11934.     rts
  11935. dbfi2:    btst #11-6,d0
  11936.     bne.b dbfi1
  11937.     and.b #%11111,d0
  11938.     bne.b no32
  11939.     moveq #32,d0
  11940. no32:    bra.w bytetod    
  11941. dbfi1:    btst #10-6,d0        ;y00xxxy00xxx
  11942.     bne.w fail
  11943.     btst #9-6,d0
  11944.     bne.w fail
  11945.     move.b #"d",(a0)+
  11946.     and.b #%111,d0
  11947.     add.b #"0",d0
  11948.     move.b d0,(a0)+
  11949.     rts
  11950. dbkpt=*-dissubs
  11951.     move.b #"#",(a0)+
  11952.     bra.w opxx02
  11953. dpack=*-dissubs
  11954.     btst #3,d1
  11955.     beq.b dpadx
  11956.     bsr.w chr2buf
  11957.     dc.w "-("
  11958.     bsr.w opax02
  11959.     bsr.w chr4buf
  11960.     dc.l "),-("
  11961.     bsr.w opax9b
  11962.     move.b #")",(a0)+
  11963.     bra.b dpad0
  11964. dpadx:    bsr.w opdx02
  11965.     bsr.w optodx9b
  11966. dpad0:    bra.w toiword
  11967. dmov16=*-dissubs
  11968.     move.w (a5),d2
  11969.     and.w #$8fff,d2    
  11970.     cmp.w #$8000,d2
  11971.     bne.w fail
  11972.     bsr.w aindirectpost
  11973.     move.w (a5)+,d1
  11974.     rol.w #4,d1
  11975.     bra.w toaindirectpost
  11976. dmov162=*-dissubs
  11977.     moveq #%010000,d2    ;(ax)
  11978.     bclr #4,d1
  11979.     bne.b dmov1
  11980.     moveq #%011000,d2    ;(ax)+
  11981. dmov1:    bclr #3,d1
  11982.     beq.b dmov0
  11983.     bsr.b dmov2
  11984.     or.w d2,d1
  11985.     bra.w dotoea
  11986. dmov0:    or.w d2,d1
  11987.     bsr.w doea
  11988.     move.b #",",(a0)+
  11989. dmov2:    bra.w abslong
  11990.     
  11991. imove=*-dissubs
  11992.     move.w d1,d0
  11993.     and.w #%0011000000000000,d0
  11994.     rol.w #4,d0
  11995.     bne.b imo0
  11996.     sf d7
  11997.     rts
  11998. imo0:    lea sizemov(pc),a1
  11999.     move.b (a1,d0.w),(a0)+
  12000.     move.b 4(a1,d0.w),imsize-base(a6)
  12001.  
  12002.     bsr.w opspos
  12003.     bsr.w doea
  12004.  
  12005.     move.w d1,d0
  12006.     rol.w #7,d0
  12007.     and.w #%111,d0
  12008.     move.w d1,d3
  12009.     lsr.w #3,d3
  12010.     and.w #%111000,d3
  12011.     or.w d3,d0
  12012.  
  12013.     move.w d0,d1
  12014.     bra.w dotoea
  12015.  
  12016. imoveq=*-dissubs
  12017.     move.b #"#",(a0)+
  12018.     moveq #0,d0
  12019.     move.b d1,d0
  12020.     bsr.w hextoa_            ;bsr.w bytetoa_
  12021.     bra.w optodx9b    
  12022.  
  12023. icallm=*-dissubs
  12024.     tst.b (a5)
  12025.     bne.w fail
  12026.     move.w d1,-(a7)
  12027.     move.b #"#",(a0)+
  12028.     moveq #0,d0
  12029.     move.b (a5)+,d0
  12030.     bne.w fail
  12031.     move.b (a5)+,d0
  12032.     bsr.w hextoa_            ;bsr.w bytetoa_
  12033.     move.w (a7)+,d1
  12034.     bra.w dotoea
  12035.  
  12036. dcas=*-dissubs
  12037.     bsr.w opspos
  12038.     move.w (a5),d0
  12039.     and.w #$0e38,d0
  12040.     bne.w fail
  12041.     move.w (a5),d0
  12042.     move.b #"d",(a0)+
  12043.     bsr.w op0xx02
  12044.     move.b #",",(a0)+
  12045.     move.w (a5)+,d0
  12046.     lsr.w #6,d0
  12047.     move.b #"d",(a0)+
  12048.     bsr.w op0xx02
  12049.     bra.w dotoea
  12050.  
  12051. dcas2=*-dissubs
  12052.     moveq #"w",d2
  12053.     btst #9,d1
  12054.     beq.b dca0
  12055.     moveq #"l",d2
  12056. dca0:    move.b d2,(a0)+
  12057.     bsr.w opspos
  12058.     move.l (a5),d2
  12059.     and.l #$0e380e38,d2
  12060.     bne.w fail
  12061.     move.l (a5),d2
  12062.     bsr.b casop
  12063.     move.b #",",(a0)+
  12064.     lsr.l #6,d2
  12065.     bsr.b casop
  12066.     bsr.w chr2buf
  12067.     dc.w ",("
  12068.     move.w (a5)+,d0
  12069.     bsr.w dbfireg
  12070.     bsr.w chr3buf
  12071.     dc.l "):("<<8
  12072.     move.w (a5)+,d0
  12073.     bsr.w dbfireg
  12074.     move.b #")",(a0)+
  12075.     rts    
  12076. casop:    move.l d2,d0
  12077.     swap d0
  12078.     move.b #"d",(a0)+
  12079.     bsr.w op0xx02
  12080.     move.w d2,d0
  12081.     bsr.w chr2buf
  12082.     dc.w ":d"
  12083.     bra.w op0xx02
  12084.  
  12085. dchk2=*-dissubs
  12086.     move.w (a5)+,d2
  12087.     btst #11,d2
  12088.     beq.w fail
  12089.     bra.b dchkcmp
  12090. dcmp2=*-dissubs
  12091.     move.w (a5)+,d2
  12092.     btst #11,d2
  12093.     bne.w fail
  12094. dchkcmp:bsr.w doea
  12095.     move.b #",",(a0)+
  12096.     move.w d2,d0
  12097.     bra.w dbfireg
  12098.  
  12099. drtm=*-dissubs
  12100.     moveq #$0f,d0
  12101.     and.w d1,d0
  12102.     bra.w dbytreg
  12103.  
  12104. dtpccsize=*-dissubs
  12105.     move.w d1,d0
  12106.     bsr.w docc
  12107. dtpc2:    move.b #".",(a0)+
  12108.     moveq #"w",d0
  12109.     btst #0,d1
  12110.     beq.b dtpc1
  12111.     moveq #"l",d0
  12112. dtpc1:    move.b d0,(a0)+
  12113.     bsr.w opspos
  12114.     move.b #"#",(a0)+
  12115.     moveq #0,d0
  12116.     btst d0,d1
  12117.     bne.b dtpc0
  12118.     move.w (a5)+,d0
  12119.     bra.w hextoa_            ;bra.w wordtoa_
  12120. dtpc0:    move.l (a5)+,d0
  12121.     bra.w hextoa_            ;bra.w longtoa_
  12122. dtpcc=*-dissubs
  12123.     move.w d1,d0
  12124.     bra.w docc
  12125. dtpfccsize=*-dissubs
  12126.     bsr.b dtpfcc0
  12127.     bra.b dtpc2
  12128. dtpfcc=*-dissubs
  12129. dtpfcc0:moveq #-32,d0        ;$ffe0    ;32 fpu ccodes
  12130.     and.w (a5),d0
  12131.     bne.w fail
  12132.     move.w (a5)+,d0
  12133.     bra.w dofcc
  12134. dtppccsize=*-dissubs
  12135.     bsr.b dtppcc0
  12136.     bra.b dtpc2
  12137. dtppcc=*-dissubs
  12138. dtppcc0:moveq #-16,d0        ;$fff0 ;16 mmu ccodes
  12139.     and.w (a5),d0
  12140.     bne.w fail
  12141.     move.w (a5)+,d0
  12142.     bra.w dopcc
  12143.  
  12144. dfnop=*-dissubs
  12145.     tst.w (a5)+        ;4byte command
  12146.     seq d7
  12147.     rts
  12148. dpvalid=*-dissubs
  12149.     moveq #-8,d0
  12150.     and.w (a5),d0
  12151.     cmp.w #$2c00,d0
  12152.     bne.w fail
  12153.     move.w (a5)+,d0
  12154.     move.b #"a",(a0)+
  12155.     bsr.w op0xx02
  12156.     bra.w dotoea
  12157.  
  12158. dpflusha=*-dissubs
  12159.     cmp.w #$2400,(a5)+
  12160.     seq d7
  12161.     rts
  12162. dpflushr=*-dissubs
  12163.     cmp.w #$a000,(a5)+
  12164.     bne.w fail
  12165.     bra.w doea
  12166. dpflushs=*-dissubs
  12167.     cmp.b #$34,(a5)
  12168.     beq.b dpfl4
  12169. dpfl5:    bra.w fail
  12170. dpflush=*-dissubs
  12171.     cmp.b #$30,(a5)
  12172.     bne.b dpfl5
  12173. dpfl4:    move.w (a5)+,d0
  12174.     moveq #%00011000,d1
  12175.     and.w d0,d1
  12176.     bne.b dpfl1
  12177.     moveq #%00000111,d1
  12178.     moveq #"s",d2
  12179.     and.w d0,d1
  12180.     beq.b dpfl2
  12181.     moveq #"d",d2
  12182.     subq.b #1,d1
  12183.     bne.w fail
  12184. dpfl2:    move.b d2,(a0)+
  12185.     bsr.w chr2buf
  12186.     dc.w "fc"
  12187.     bra.b dpfl3
  12188. dpfl1:    cmp.w #%00011000,d1    ;illegal
  12189.     beq.w fail
  12190.     moveq #"#",d1
  12191.     bclr #3,d0    
  12192.     beq.b dpfl0
  12193.     moveq #"d",d1
  12194. dpfl0:    move.b d1,(a0)+
  12195.     bsr.w nibtoa
  12196. dpfl3:    bsr.w chr2buf
  12197.     dc.w ",#"
  12198.     lsr.w #5,d0
  12199.     bra.w op0xx02
  12200. dpload=*-dissubs
  12201.     move.w (a5),d0
  12202.     and.w #$fdf8,d0
  12203.     cmp.w #$2010,d0
  12204.     bne.w fail
  12205. dpte0:    move.w (a5)+,d0
  12206.     move.b #"r",(a0)
  12207.     btst #9,d0
  12208.     bne.b dplo0
  12209.     addq.b #"w"-"r",(a0)
  12210. dplo0:    bsr.w opspos
  12211.     move.b #"#",(a0)+
  12212.     bsr.w nibtoa
  12213.     bra.w dotoea
  12214. dptest=*-dissubs
  12215.     move.w (a5),d0
  12216.     and.w #$e118,d0
  12217.     cmp.w #$8110,d0
  12218.     bne.w fail
  12219.     move.w (a5),d2
  12220.     bsr.b dpte0
  12221.     bsr.w chr2buf
  12222.     dc.w ",#"
  12223.     move.w d2,d0
  12224.     rol.w #6,d0
  12225.     moveq #%111,d2
  12226.     and.b d0,d2
  12227.     beq.w fail    ;level 0
  12228.     bsr.w nibtoa
  12229.     bsr.w chr2buf
  12230.     dc.w ",a"
  12231.     rol.w #5,d0
  12232.     bclr #3,d0
  12233.     bra.w nibtoa
  12234.  
  12235. ddivsll=*-dissubs
  12236.     move.w (a5)+,d2
  12237.     bchg #10,d2        ;dn:dm mode,set g=1
  12238.     bne.w fail    
  12239.     bsr.b dmul5
  12240.     bra.b ddivl
  12241. ddivull=*-dissubs
  12242.     move.w (a5)+,d2
  12243.     bchg #10,d2        ;dn:dm mode,set g=1
  12244.     bne.w fail    
  12245.     bsr.b dmul4
  12246. ddivl:    sub.b d2,d1
  12247.     and.b #%111,d1        ;dm=dn
  12248.     beq.w fail
  12249.     rts
  12250. dmulsl=*-dissubs
  12251. dmul3:    move.w (a5)+,d2
  12252. dmul5:    btst #11,d2
  12253.     beq.w fail
  12254.     bra.b dmul1
  12255. dmulul=*-dissubs
  12256. dmul2:    move.w (a5)+,d2
  12257. dmul4:    btst #11,d2
  12258.     bne.w fail
  12259. dmul1:    move.w #$83f8,d0
  12260.     and.w d2,d0
  12261.     bne.w fail
  12262.     move.b #%10,imsize-base(a6)    ;longwords
  12263.     bsr.w doea
  12264.     move.b #",",(a0)+
  12265.     move.w d2,d1
  12266.     btst #10,d2
  12267.     beq.b dmul0
  12268.     bsr.w opdx02
  12269.     move.b #":",(a0)+
  12270.     rol.w #4,d1
  12271.     bra.w opdx02
  12272.  
  12273. dmul0:    rol.w #4,d1
  12274.     bsr.w opdx02
  12275.     sub.b d2,d1
  12276.     and.b #%111,d1        ;mulxl ea,dn:dm=dn    
  12277.     bne.w fail
  12278.     rts
  12279.  
  12280. icmpm=*-dissubs
  12281.     bsr.w aindirectpost
  12282.     rol.w #7,d1        ;(ax)+
  12283.     bra.w toaindirectpost
  12284.  
  12285. xbcd=*-dissubs
  12286.     bclr #14,d1
  12287.     bclr #3,d1        ;dx
  12288.     beq.b xbcdx    
  12289.     bset #5,d1        ;-(ax)
  12290.     bset #14,d1
  12291. xbcdx:    bsr.w doea        ;no im possible
  12292.     rol.w #7,d1
  12293.     bra.w dotoea
  12294.  
  12295. size67adsbx=*-dissubs
  12296.     bclr #14,d1
  12297.     bclr #12,d1
  12298.     bclr #3,d1        ;dx
  12299.     beq.b adsbxdx
  12300.     bset #14,d1        ;-(ax)
  12301.     bset #5,d1
  12302. adsbxdx:bsr.w doea
  12303.     rol.w #7,d1
  12304.     bra.w dotoea    
  12305.  
  12306. size6movep=*-dissubs
  12307.     bset #5,d1        ;d(ax)
  12308.     btst #7,d1
  12309.     beq.b mptodx
  12310.     bsr.w opdx9b
  12311.     bra.w dotoea
  12312. mptodx:    bsr.w doea
  12313.     bra.w optodx9b
  12314.  
  12315. imovem=*-dissubs
  12316.     move.w (a5)+,d3        ;regbits
  12317.     btst #10,d1        ;dir
  12318.     bne.b torx
  12319.     bsr.w dorx
  12320.     bra.w dotoea
  12321. torx:    bsr.w doea
  12322.     move.b #",",(a0)+
  12323.     bra.w dorx
  12324.  
  12325. dx9btodx02=*-dissubs
  12326.     bsr.w opdx9b
  12327.     bra.w optodx02
  12328. ax9btoax02=*-dissubs
  12329.     bsr.w opax9b
  12330.     bra.w optoax02
  12331. dx9btoax02=*-dissubs
  12332.     bsr.w opdx9b
  12333.     bra.w optoax02
  12334.  
  12335. dlinklg=*-dissubs
  12336.     bsr.b iunl0
  12337.     bsr.w chr2buf
  12338.     dc.w ",#"
  12339.     bra.w dtpc0
  12340. ilink=*-dissubs
  12341.     bsr.b iunl0
  12342.     bra.w toiword
  12343. iunlk=*-dissubs
  12344. iunl0:    bra.w opax02
  12345.  
  12346. size8eatoax9b=*-dissubs
  12347.     bsr.w doea
  12348.     bra.b optoax9b
  12349.  
  12350. size8:    btst #8,d1
  12351.     beq.b siz60
  12352.     bra.b siz61
  12353. size6:    btst #6,d1
  12354.     bne.b siz61
  12355. siz60:    moveq #"w",d0
  12356.     move.b #1,imsize-base(a6)
  12357.     bra.b siz62
  12358. siz61:    moveq #"l",d0
  12359.     move.b #2,imsize-base(a6)
  12360. siz62:    move.b #".",(a0)+
  12361.     move.b d0,(a0)
  12362.     bra.b opspos
  12363. size9a_:move.w d1,d0            ;01.b,10.w,11.l,00.*
  12364.     lsr.w #3,d0
  12365.     sub.w #%01000000,d0    
  12366.     bra.b si9a
  12367. size9a:    move.w d1,d0            ;00.b,01.w,10.l,11.*
  12368.     lsr.w #3,d0
  12369.     bra.b si9a
  12370. size67:    move.w d1,d0
  12371. siz67d0:
  12372. si9a:    and.w #%11000000,d0
  12373.     cmp.w #%11000000,d0
  12374.     beq.w fail
  12375.     lsr.w #6,d0
  12376.     move.b d0,imsize-base(a6)    ;00.b,01.w,10.l,11.*
  12377.     move.b #".",(a0)+
  12378.     move.b sizetxt(pc,d0.w),(a0)
  12379. opspos:    lea linebuf+23-base(a6),a0        ;ftrapngle.l
  12380.     rts
  12381. sizetxt:dc.l "bwl*"
  12382.  
  12383. opi9b:    move.b #"#",(a0)+
  12384.     move.w d1,d0
  12385.     and.w #%111000000000,d0
  12386.     rol.w #7,d0
  12387.     bne.b i9b0
  12388.     moveq #8,d0
  12389. i9b0:    bra.w nibtod
  12390. optoax9b:move.b #",",(a0)+
  12391. opax9b:    move.b #"a",(a0)+
  12392.     bra.b opxx
  12393. optodx9b:move.b #",",(a0)+
  12394. opdx9b:    move.b #"d",(a0)+
  12395. opxx:    move.w d1,d0
  12396.     and.w #%111000000000,d0
  12397.     rol.w #7,d0
  12398.     add.b #"0",d0
  12399.     move.b d0,(a0)+
  12400.     rts
  12401. optoax02:move.b #",",(a0)+
  12402. opax02:    move.b #"a",(a0)+
  12403.     bra.b opxx02
  12404. optodx02:move.b #",",(a0)+
  12405. opdx02:    move.b #"d",(a0)+
  12406. opxx02:    move.w d1,d0
  12407. op0xx02:and.w #%111,d0
  12408.     add.b #"0",d0
  12409.     move.b d0,(a0)+
  12410.     rts
  12411. optofpx79:move.b #",",(a0)+
  12412. opfpx79:bsr.b chr2buf
  12413.     dc.w "fp"
  12414.     lsr.w #7,d0
  12415.     bra.b op0xx02
  12416. optousp:move.b #",",(a0)+
  12417. opusp:    lea usptxt(pc),a1
  12418.     bra.b txttobuf
  12419. optoccr:move.b #",",(a0)+
  12420. opccr:    lea ccrtxt(pc),a1
  12421.     bra.b txttobuf
  12422. optosr:    move.b #",",(a0)+
  12423. opsr:    lea srtxt(pc),a1
  12424. txttobuf:
  12425.     move.b (a1)+,(a0)
  12426.     bclr #7,(a0)+
  12427.     beq.b txttobuf
  12428. txtq:    rts    
  12429. chr2buf:move.l a1,-(a7)        ;copies 2 chrs below bsr chr2buf
  12430.     move.l 4(a7),a1
  12431.     move.b (a1)+,(a0)+
  12432.     move.b (a1)+,(a0)+
  12433.     move.l (a7)+,a1
  12434.     addq.l #2,(a7)
  12435.     rts
  12436. chr3buf:            ;copies 3 chrs below bsr chr3buf
  12437. chr4buf:move.l a1,-(a7)        ;copies 4 chrs below bsr chr4buf
  12438.     move.l 4(a7),a1
  12439.     move.b (a1)+,(a0)+
  12440.     move.b (a1)+,(a0)+
  12441.     move.b (a1)+,(a0)+
  12442.     tst.b (a1)
  12443.     beq.b chr0
  12444.     move.b (a1)+,(a0)+
  12445. chr0:    move.l (a7)+,a1
  12446.     addq.l #4,(a7)
  12447.     rts
  12448.  
  12449. bcpltobuf:move.b (a1)+,d0
  12450. bcpl0:    subq.b #1,d0
  12451.     bmi.b bcpl1
  12452.     move.b (a1)+,(a0)+
  12453.     bra.b bcpl0        
  12454. bcpl1:    rts
  12455.  
  12456. dorx:    move.w d1,d0
  12457.     and.w #%111000,d0
  12458.     cmp.w #%100000,d0    ;-(ax)
  12459.     bne.b drx8
  12460.     moveq #16-1,d2
  12461. drx9:    lsr.w #1,d3
  12462.     roxl.w #1,d0
  12463.     dbf d2,drx9    
  12464.     move.w d0,d3
  12465. drx8:    sf d5
  12466.     clr.w d2
  12467.     moveq #"d",d0
  12468.     bsr.b drx0
  12469.     moveq #"a",d0
  12470. drx0:    moveq #8,d4
  12471. drx1:    tst.w d4
  12472.     beq.b drx5
  12473.     btst d2,d3
  12474.     bne.b drx2
  12475.     addq.w #1,d2
  12476.     subq.w #1,d4
  12477.     bra.b drx1
  12478. drx2:    tas d5
  12479.     beq.b drx3
  12480.     move.b #"/",(a0)+
  12481. drx3:    move.b d0,(a0)+
  12482.     move.b d2,(a0)
  12483.     add.b #"0",(a0)
  12484.     bclr #3,(a0)+
  12485.     sf d6
  12486. drx4:    addq.w #1,d2
  12487.     subq.w #1,d4
  12488.     beq.b drx6
  12489.     btst d2,d3
  12490.     beq.b drx6
  12491.     st d6
  12492.     bra.b drx4
  12493. drx6:    tst.b d6
  12494.     beq.b drx7
  12495.     move.b #"-",(a0)+
  12496.     move.b d0,(a0)+
  12497.     move.b d2,(a0)
  12498.     add.b #"0"-1,(a0)
  12499.     bclr #3,(a0)+
  12500. drx7:    tst.w d4
  12501.     beq.b drx5
  12502.     subq.w #1,d4
  12503.     addq.w #1,d2
  12504.     bra.b drx1
  12505. drx5:    rts
  12506.  
  12507. dofprx:    move.w d1,d0
  12508.     and.w #%111000,d0
  12509.     beq.w fail        ;Dn
  12510.     cmp.w #%001000,d0    ;An
  12511.     beq.w fail
  12512.     moveq #%01110000,d6
  12513.     and.l d3,d6        ;pos
  12514.     cmp.b d3,d6
  12515.     beq.b dfprxa
  12516.     moveq #-1,d6        ;neg:bad dynamic mask
  12517. dfprxa:    lsr.b #4,d6
  12518.     add.b #"0",d6        ;dynamic mask
  12519.     cmp.w #%100000,d0    ;-(ax)
  12520.     bne.b dfprx8
  12521.     btst #13,d3    ;dr field
  12522.     beq.w fail    ;to FPx?
  12523.     btst #12,d3    ;mode
  12524.     bne.w fail    ;no predec mode?
  12525.     moveq #8-1,d2
  12526. dfprx9:    lsr.b #1,d3
  12527.     roxl.b #1,d0
  12528.     dbf d2,dfprx9    
  12529.     move.b d0,d3
  12530.     bra.b dfprx0
  12531. dfprx8:    btst #12,d3    ;mode
  12532.     beq.w fail    ;predec mode?
  12533. dfprx0:    btst #11,d3
  12534.     beq.b dfpstat
  12535.     tst.l d6
  12536.     bmi.w fail    ;bad dynamic mask
  12537.     move.b #"d",(a0)+
  12538.     move.b d6,(a0)+
  12539. dfprx5:    rts
  12540. dfpstat:sf d0
  12541.     moveq #8-1,d2
  12542. dfprx1:    tst.w d2
  12543.     bmi.b dfprx5
  12544.     btst d2,d3
  12545.     bne.b dfprx2
  12546.     subq.w #1,d2
  12547.     bra.b dfprx1
  12548. dfprx2:    tas d0
  12549.     beq.b dfprx3
  12550.     move.b #"/",(a0)+
  12551. dfprx3:    move.b #"f",(a0)+
  12552.     move.b #"p",(a0)+
  12553.     move.b #"7",(a0)
  12554.     sub.b d2,(a0)+
  12555.     sf d6
  12556. dfprx4:    subq.w #1,d2
  12557.     bmi.b dfprx6
  12558.     btst d2,d3
  12559.     beq.b dfprx6
  12560.     st d6
  12561.     bra.b dfprx4
  12562. dfprx6:    tst.b d6
  12563.     beq.b dfprx7
  12564.     move.b #"-",(a0)+
  12565.     move.b #"f",(a0)+
  12566.     move.b #"p",(a0)+
  12567.     move.b #"7"-1,(a0)
  12568.     sub.b d2,(a0)+
  12569. dfprx7:    tst.w d2
  12570.     bmi.b dfprx5
  12571.     subq.w #1,d2
  12572.     bra.b dfprx1
  12573.  
  12574. docc:    lea ccodetxt(pc),a1
  12575.     and.w #%111100000000,d0
  12576.     lsr.w #7,d0
  12577.     lea (a1,d0.w),a1
  12578.     move.b (a1)+,(a0)+
  12579.     tst.b (a1)
  12580.     beq.b docc0
  12581.     move.b (a1)+,(a0)+
  12582. docc0:    rts
  12583. dopcc:    lea pccodetxt(pc),a1
  12584.     and.w #%001111,d0
  12585.     add.w d0,d0
  12586.     lea (a1,d0.w),a1
  12587.     move.b (a1)+,(a0)+
  12588.     move.b (a1)+,(a0)+
  12589.     rts
  12590. dofcc:    lea fccodetxt(pc),a1
  12591.     and.w #%011111,d0
  12592.     add.w d0,d0
  12593.     add.w d0,d0
  12594.     lea (a1,d0.w),a1
  12595.     move.b (a1)+,(a0)+    ;1..4 chars
  12596.     tst.b (a1)
  12597.     beq.b dofcc0
  12598.     move.b (a1)+,(a0)+
  12599.     tst.b (a1)
  12600.     beq.b dofcc0
  12601.     move.b (a1)+,(a0)+
  12602.     tst.b (a1)
  12603.     beq.b dofcc0
  12604.     move.b (a1)+,(a0)+
  12605. dofcc0:    rts
  12606.  
  12607.  
  12608.  
  12609. dotoea:    move.w d1,d0
  12610.     and.w #%111111,d0
  12611.     cmp.w #%111001,d0    ;dest:(pc),d(pc),#xx invalid
  12612.     bls.b doto0
  12613.     sf d7 
  12614.     rts
  12615. doto0:    move.b #",",(a0)+
  12616.  
  12617. doea:    moveq #%111000,d0
  12618.     and.w d1,d0
  12619.     lsr.w #2,d0
  12620.     pea eatab(pc)
  12621.     move.w eatab(pc,d0.w),d0    ;ext.l obsolete
  12622.     add.l d0,(a7)
  12623.     rts
  12624.  
  12625. eatab:    dc.w ddirect-eatab
  12626.     dc.w adirect-eatab
  12627.     dc.w aindirect-eatab
  12628.     dc.w aindirectpost-eatab
  12629.     dc.w aindirectpre-eatab
  12630.     dc.w aindirectdisp-eatab
  12631.     dc.w aindirectindex-eatab
  12632.     dc.w mode7-eatab
  12633. ddirect:move.b #"d",(a0)+
  12634.     moveq #%000111,d0
  12635.     and.w d1,d0
  12636.     add.b #"0",d0
  12637.     move.b d0,(a0)+
  12638.     rts
  12639. adirect:move.b #"a",(a0)+
  12640.     moveq #%000111,d0
  12641.     and.w d1,d0
  12642.     add.b #"0",d0
  12643.     move.b d0,(a0)+
  12644.     rts
  12645. toaindirect:
  12646.     move.b #",",(a0)+
  12647. aindirect:
  12648.     move.b #"(",(a0)+
  12649.     move.b #"a",(a0)+
  12650.     moveq #%000111,d0
  12651.     and.w d1,d0
  12652.     add.b #"0",d0
  12653.     move.b d0,(a0)+
  12654.     move.b #")",(a0)+
  12655.     bsr.w setbase
  12656.     bra.w eaval
  12657. toaindirectpost:
  12658.     move.b #",",(a0)+
  12659. aindirectpost:
  12660.     move.b #"(",(a0)+
  12661.     move.b #"a",(a0)+
  12662.     moveq #%000111,d0
  12663.     and.w d1,d0
  12664.     add.b #"0",d0
  12665.     move.b d0,(a0)+
  12666.     move.b #")",(a0)+
  12667.     move.b #"+",(a0)+
  12668.     bsr.w setbase
  12669.     bra.w eaval
  12670. aindirectpre:
  12671.     move.b #"-",(a0)+
  12672.     move.b #"(",(a0)+
  12673.     moveq #%000111,d0
  12674.     and.w d1,d0
  12675.     add.b #"0",d0
  12676.     move.b #"a",(a0)+
  12677.     move.b d0,(a0)+
  12678.     move.b #")",(a0)+
  12679.     bsr.w setbase
  12680.     bra.w eaval
  12681. aindirectdisp:
  12682.     move.b #"(",(a0)+
  12683.     move.w (a5),d0
  12684.     bsr.w swordtoa_
  12685.     move.b #",",(a0)+
  12686.     move.b #"a",(a0)+
  12687.     moveq #%000111,d0
  12688.     and.w d1,d0
  12689.     add.b #"0",d0
  12690.     move.b d0,(a0)+
  12691.     move.b #")",(a0)+
  12692.     bsr.w setbase
  12693.     move.w (a5)+,d0
  12694.     ext.l d0
  12695.     add.l d0,basereg-base(a6)
  12696.     bra.w eaval
  12697. aindirectindex:
  12698.     btst #0,(a5)
  12699.     bne.w indfull
  12700.     bsr.w setbase
  12701.     move.b #"(",(a0)+
  12702.     move.w (a5),d0
  12703.     bsr.w sbytetoa_
  12704.     ext.w d0
  12705.     ext.l d0
  12706.     add.l d0,basereg-base(a6)
  12707.     move.b #",",(a0)+
  12708.     move.b #"a",(a0)+
  12709.     moveq #%000111,d0
  12710.     and.w d1,d0
  12711.     add.b #"0",d0
  12712.     move.b d0,(a0)+
  12713.     move.b #",",(a0)+
  12714.     moveq #"d",d0
  12715.     btst #7,(a5)
  12716.     beq.b ind0
  12717.     moveq #"a",d0
  12718. ind0:    move.b d0,(a0)+
  12719.     moveq #%01110000,d0
  12720.     and.b (a5),d0
  12721.     lsr.b #4,d0
  12722.     add.b #"0",d0
  12723.     move.b d0,(a0)+
  12724.     movem.l d1/a1,-(a7)
  12725.     move.w #%11110000,d0
  12726.     and.b (a5),d0
  12727.     lsr.b #2,d0
  12728.     lea regs-base(a6),a1
  12729.     move.l (a1,d0.w),d1
  12730.     move.b #".",(a0)+
  12731.     moveq #"l",d0
  12732.     btst #3,(a5)
  12733.     bne.b ind1
  12734.     moveq #"w",d0
  12735.     ext.l d1
  12736. ind1:    move.b d0,(a0)+
  12737.     moveq #%00000110,d0
  12738.     and.b (a5),d0
  12739.     beq.b ind2
  12740.     lsr.b #1,d0
  12741.     move.b #"*",(a0)+
  12742.     move.b scale(pc,d0.w),(a0)+
  12743. ind2:    lsl.l d0,d1
  12744.     add.l d1,basereg-base(a6)
  12745.     move.b #")",(a0)+
  12746.     movem.l (a7)+,d1/a1
  12747.     addq.w #2,a5
  12748.     bra.w eaval
  12749. scale:    dc.l "1248"
  12750. pcindfull:
  12751. indfull:moveq #%00001000,d0
  12752.     and.w (a5),d0
  12753.     bne.w reserved        ;fail
  12754.     moveq #%01000111,d0
  12755.     and.w (a5),d0
  12756.     cmp.b #%01000100,d0
  12757.     bcc.w reserved
  12758.     cmp.b #%00000100,d0
  12759.     beq.w reserved
  12760.     moveq #%00110000,d0
  12761.     and.w (a5),d0
  12762.     beq.w reserved
  12763.  
  12764.     move.w d2,-(a7)
  12765.     move.w (a5)+,d2        ;full format extension
  12766.     move.b #"(",(a0)+
  12767.     moveq #%00000111,d0
  12768.     and.w d2,d0
  12769.     beq.b nomemind
  12770.     move.b #"[",(a0)+
  12771. nomemind:        
  12772.  
  12773.     moveq #%111111,d0
  12774.     and.w d1,d0
  12775.     cmp.w #%111011,d0    ;pc indirect?
  12776.     bne.b nopcind
  12777.  
  12778.     moveq #%00110000,d0
  12779.     and.w d2,d0
  12780.     lsr.w #4,d0
  12781.     btst #7,d2
  12782.     beq.b nozpc
  12783.     bsr.w displace
  12784.     cmp.b #"[",-1(a0)
  12785.     beq.b noidisp
  12786.     move.b #",",(a0)+
  12787. noidisp:move.b #"z",(a0)+
  12788.     bra.b dozpc
  12789. nozpc:    subq.b #1,d0
  12790.     beq.b dozpc
  12791.     subq.b #1,d0
  12792.     beq.b nozpc1
  12793.     move.l a5,d0
  12794.     add.l (a5)+,d0
  12795.     subq.l #2,d0
  12796.     bsr.w hextoa_
  12797. ;    move.b #".",(a0)+
  12798. ;    move.b #"l",(a0)+
  12799.     bra.b nozpc0
  12800. nozpc1:    move.w (a5)+,d0
  12801.     ext.l d0
  12802.     add.l a5,d0
  12803.     subq.l #4,d0
  12804.     bsr.w hextoa_
  12805.     move.b #".",(a0)+
  12806.     move.b #"w",(a0)+
  12807. nozpc0:    move.b #",",(a0)+
  12808. dozpc:    move.b #"p",(a0)+
  12809.     move.b #"c",(a0)+
  12810.     bra.b baseok
  12811. nopcind:moveq #%00110000,d0    ;base displacement
  12812.     and.w d2,d0
  12813.     lsr.w #4,d0
  12814.     bsr.w displace
  12815.     moveq #%000111,d0
  12816.     and.w d1,d0
  12817.     btst #7,d2        ;bs
  12818.     bne.b basesupr
  12819.     cmp.b #"[",-1(a0)
  12820.     beq.b noidis2
  12821.     cmp.b #"(",-1(a0)
  12822.     beq.b noidis2
  12823.     move.b #",",(a0)+
  12824. noidis2:move.b #"a",(a0)+
  12825.     add.b #"0",d0
  12826.     move.b d0,(a0)+
  12827.     bra.b baseok    
  12828. basesupr:
  12829.     tst.b d0
  12830.     bne.w basfail
  12831. baseok:    
  12832.     btst #2,d2        ;postindex?
  12833.     beq.b nopost
  12834.     move.b #"]",(a0)+
  12835. nopost:    btst #6,d2
  12836.     bne.b indsupr
  12837.     cmp.b #"[",-1(a0)
  12838.     beq.b indpre
  12839.     cmp.b #"(",-1(a0)
  12840.     beq.b indpre
  12841.     move.b #",",(a0)+
  12842. indpre:    moveq #"d",d0
  12843.     tst.w d2
  12844.     bpl.b dindx
  12845.     moveq #"a",d0
  12846. dindx:    move.b d0,(a0)+
  12847.     move.w #%0111000000000000,d0
  12848.     and.w d2,d0
  12849.     rol.w #4,d0
  12850.     add.b #"0",d0
  12851.     move.b d0,(a0)+
  12852.     move.b #".",(a0)+
  12853.     moveq #"l",d0
  12854.     btst #11,d2
  12855.     bne.b dind1
  12856.     moveq #"w",d0
  12857. dind1:    move.b d0,(a0)+
  12858.     move.w #%0000011000000000,d0
  12859.     and.w d2,d0
  12860.     beq.b dind2
  12861.     rol.w #7,d0
  12862.     move.b #"*",(a0)+
  12863.     move.b scale3(pc,d0.w),(a0)+
  12864. dind2:    bra.b indok
  12865. scale3:    dc.l "1248"
  12866. indsupr:move.w #%1111111000000000,d0
  12867.     and.w d2,d0
  12868.     bne.b indfail
  12869. indok:    moveq #%00000111,d0
  12870.     and.w d2,d0
  12871.     beq.b nopre
  12872.     btst #2,d2
  12873.     bne.b nopre 
  12874.     move.b #"]",(a0)+
  12875. nopre:
  12876.     moveq #%00000011,d0    ;outer displacement
  12877.     and.w d2,d0
  12878.     beq.b nomemind2
  12879.     cmp.b #1,d0
  12880.     beq.b nokoma
  12881.     move.b #",",(a0)+
  12882. nokoma:    bsr.b displace
  12883. nomemind2:    
  12884.     move.b #")",(a0)+
  12885. indquit:move.w (a7)+,d2
  12886.     rts
  12887. indfail:
  12888. basfail:sf d7
  12889.     bra.b indquit
  12890.  
  12891. displace:
  12892.     subq.b #1,d0
  12893.     beq.b nullouter
  12894.     subq.b #1,d0
  12895.     beq.b wordouter
  12896.     move.l (a5)+,d0
  12897.     bsr.w hextoa_
  12898. ;    move.b #".",(a0)+
  12899. ;    move.b #"l",(a0)+
  12900.     rts
  12901. wordouter:
  12902.     move.w (a5)+,d0        ;upper word=0
  12903.     bsr.w hextoa_
  12904.     move.b #".",(a0)+
  12905.     move.b #"w",(a0)+
  12906. nullouter:
  12907.     rts
  12908.  
  12909. mode7:    moveq #%000111,d0
  12910.     and.w d1,d0
  12911.     add.w d0,d0
  12912.     pea mod7tab(pc)
  12913.     move.w mod7tab(pc,d0.w),d0
  12914.     add.l d0,(a7)
  12915.     rts
  12916. mod7tab:dc.w absshort-mod7tab
  12917.     dc.w abslong-mod7tab
  12918.     dc.w pcindirect-mod7tab
  12919.     dc.w pcindex-mod7tab
  12920.     dc.w immediate-mod7tab
  12921.     dc.w reserved-mod7tab
  12922.     dc.w reserved-mod7tab
  12923.     dc.w reserved-mod7tab
  12924.  
  12925. absshort:
  12926.     move.b #"(",(a0)+
  12927.     moveq #0,d0
  12928.     move.w (a5)+,d0
  12929.     bsr.w hextoa_
  12930.     move.b #")",(a0)+
  12931.     move.b #".",(a0)+
  12932.     move.b #"w",(a0)+
  12933.     rts
  12934. abslong:move.b #"(",(a0)+
  12935.     move.l (a5)+,d0
  12936.     bsr.w hextoa_
  12937.     move.b #")",(a0)+
  12938.     rts
  12939. pcindirect:
  12940.     move.b #"(",(a0)+
  12941.     moveq #-2,d0
  12942.     add.w (a5)+,d0
  12943.     ext.l d0
  12944.     add.l a5,d0
  12945.     bsr.w hextoa_
  12946.     move.b #",",(a0)+
  12947.     move.b #"p",(a0)+
  12948.     move.b #"c",(a0)+
  12949.     move.b #")",(a0)+
  12950.     rts
  12951. pcindex:btst #0,(a5)
  12952.     bne.w pcindfull
  12953.     move.b #"(",(a0)+
  12954.     move.w (a5),d0
  12955.     ext.w d0
  12956.     ext.l d0
  12957.     add.l a5,d0
  12958.     move.l d0,basereg-base(a6)
  12959.     bsr.w hextoa_
  12960.     move.b #",",(a0)+
  12961.     move.b #"p",(a0)+
  12962.     move.b #"c",(a0)+
  12963.     move.b #",",(a0)+
  12964.     moveq #"d",d0
  12965.     btst #7,(a5)
  12966.     beq.b pcind0
  12967.     moveq #"a",d0
  12968. pcind0:    move.b d0,(a0)+
  12969.     moveq #%01110000,d0
  12970.     and.b (a5),d0
  12971.     lsr.b #4,d0
  12972.     add.b #"0",d0
  12973.     move.b d0,(a0)+
  12974.     movem.l d1/a1,-(a7)
  12975.     move.w #%11110000,d0
  12976.     and.b (a5),d0
  12977.     lsr.b #2,d0
  12978.     lea regs-base(a6),a1
  12979.     move.l (a1,d0.w),d1
  12980.     move.b #".",(a0)+
  12981.     moveq #"l",d0
  12982.     btst #3,(a5)
  12983.     bne.b pcind1
  12984.     moveq #"w",d0
  12985.     ext.l d1
  12986. pcind1:    move.b d0,(a0)+
  12987.     moveq #%00000110,d0
  12988.     and.b (a5),d0
  12989.     beq.b pcind2
  12990.     lsr.b #1,d0
  12991.     move.b #"*",(a0)+
  12992.     move.b scale2(pc,d0.w),(a0)+
  12993. pcind2:    lsl.l d0,d1
  12994.     add.l d1,basereg-base(a6)
  12995.     move.b #")",(a0)+
  12996.     movem.l (a7)+,d1/a1
  12997.     addq.w #2,a5
  12998.     bra.w eaval
  12999. scale2:    dc.l "1248"
  13000.  
  13001. immediate:
  13002.     move.b #"#",(a0)+
  13003.     moveq #0,d0
  13004.     move.w (a5)+,d0
  13005.     tst.b imsize-base(a6)
  13006.     bne.b imword
  13007.     cmp.w #$ff,d0
  13008.     bhi.b reserved        ;fail
  13009.     bra.w hextoa_
  13010. imword:    cmp.b #%001,imsize-base(a6)
  13011.     bne.b imlong
  13012.     bra.w hextoa_
  13013. imlong:    cmp.b #%010,imsize-base(a6)
  13014.     bne.b fpu4wrd
  13015.     swap d0
  13016.     move.w (a5)+,d0
  13017.     bra.w hextoa_
  13018. imresvd:cmp.b #%011,imsize-base(a6)
  13019.     beq.b reserved
  13020. fpu4wrd:cmp.b #%100,imsize-base(a6)    ;%1xx fpu imsize
  13021.     bne.b fpu5wrd
  13022. fpu4w0:    swap d0
  13023.     move.w (a5)+,d0
  13024.     bsr.w longtoa_
  13025. fpu2w0:    move.l (a5)+,d0
  13026.     bra.w longtoa
  13027. fpu5wrd:cmp.b #%101,imsize-base(a6)
  13028.     beq.b reserved
  13029. fpu6wrd:cmp.b #%110,imsize-base(a6)
  13030.     bne.b reserved
  13031.     bsr.b fpu4w0
  13032.     bra.b fpu2w0
  13033.  
  13034. reserved:
  13035.     sf d7
  13036.     rts
  13037.  
  13038. setbase:move.l a1,-(a7)
  13039.     lea regs-base(a6),a1
  13040.     moveq #%000111,d0
  13041.     and.w d1,d0
  13042.     lsl.w #2,d0
  13043.     move.l 8*4(a1,d0.w),basereg-base(a6)    ;contents An
  13044.     move.l (a7)+,a1
  13045.     rts
  13046. eaval:    btst #2,dissign-base(a6)
  13047.     beq.b eaval1
  13048.     move.l a0,-(a7)
  13049.     move.l basereg-base(a6),d0
  13050.     lea linebuf+60-base(a6),a0        ;longest movem.l .... !
  13051.     move.b #";",(a0)+
  13052.     tst.b ea2nd-base(a6)
  13053.     beq.b eaval0 
  13054.     lea 10(a0),a0
  13055. eaval0:    bsr.w longtoa_
  13056.     st ea2nd-base(a6)
  13057.     move.l (a7)+,a0
  13058. eaval1:    rts
  13059.  
  13060. sbytetoa_:move.l d0,-(a7)
  13061.     btst #0,dissign-base(a6)
  13062.     beq.b sby0
  13063.     tst.b d0
  13064.     bpl.b sby0
  13065.     neg.b d0    
  13066.     move.b #"-",(a0)+
  13067. sby0:    and.l #$ff,d0
  13068.     btst #1,dissign-base(a6)
  13069.     beq.b sby1
  13070.     bsr.w hextod
  13071.     bra.b sby2
  13072. sby1:    bsr.w hextoa_            ;bsr.w bytetoa_
  13073. sby2:    move.l (a7)+,d0
  13074.     rts
  13075.  
  13076. swordtoa_:move.l d0,-(a7)
  13077.     btst #0,dissign-base(a6)
  13078.     beq.b swo0
  13079.     tst.w d0
  13080.     bpl.b swo0
  13081.     neg.w d0
  13082.     move.b #"-",(a0)+    
  13083. swo0:    and.l #$ffff,d0
  13084.     btst #1,dissign-base(a6)
  13085.     beq.b swo1
  13086.     bsr.w hextod
  13087.     bra.b swo2
  13088. swo1:    bsr.w hextoa_            ;bsr.w wordtoa_
  13089. swo2:    move.l (a7)+,d0
  13090.     rts
  13091.  
  13092. assubs:
  13093. aopfail=*-assubs
  13094. anoops=*-assubs
  13095.     rts
  13096. adcwop=*-assubs
  13097.     bsr.w atoword_
  13098.     move.w d0,op68000-base(a6)
  13099.     rts
  13100. aeatoccr=*-assubs
  13101.     sf imsize-base(a6)
  13102.     bsr.w assea
  13103.     lea toccrtxt(pc),a0
  13104.     bra.w cmptxt
  13105. aeatosr=*-assubs
  13106.     move.b #1,imsize-base(a6)
  13107.     bsr.w assea
  13108.     lea tosrtxt(pc),a0
  13109.     bra.w cmptxt
  13110.  
  13111. accrtoea=*-assubs
  13112.     lea ccrtxt(pc),a0
  13113.     bra.b assrea
  13114. asrtoea=*-assubs
  13115.     lea srtxt(pc),a0
  13116. assrea:    bsr.w cmptxt
  13117.     bra.w asstoea
  13118.  
  13119. abrapcc=*-assubs
  13120.     bsr.w asspccode
  13121.     bra.b abraf0
  13122. abrafcc=*-assubs
  13123.     bsr.w assfccode
  13124. abraf0:    or.w d0,op68000-base(a6)
  13125.     cmp.b #".",(a3)+
  13126.     bne.w fail
  13127.     cmp.b #"w",(a3)+
  13128.     beq.b awdcc0
  13129.     bset #6,op68000+1-base(a6)    ;long
  13130.     cmp.b #"l",-1(a3)
  13131.     beq.b algcc0
  13132.     bra.b awdbxx1        ;fail
  13133. awordcc=*-assubs
  13134.     bsr.w assccode
  13135.     cmp.b #".",(a3)+
  13136.     bne.b awdbxx1        ;fail
  13137.     cmp.b #"w",(a3)+    ;bxx.w
  13138.     bne.b awdbxx1        ;fail
  13139. awdcc0:    bsr.w asstab
  13140. awordbxx=*-assubs
  13141. awdrel:    bsr.w atolong_
  13142.     subq.l #2,d0
  13143.     sub.l lginstr-base(a6),d0    ;fdbx dx,lab...
  13144.     sub.l para-base(a6),d0
  13145.     move.l d0,d1
  13146.     ;beq.b awdbxx1        ;beq.w *+2
  13147.     bpl.b awdbxx0
  13148.     not.l d1
  13149. awdbxx0:cmp.l #$7fff,d1
  13150.     bhi.b awdbxx1
  13151.     bra.w storeword 
  13152. awdbxx1:sf d7
  13153.     rts
  13154. alongcc=*-assubs
  13155.     bsr.w assccode
  13156.     cmp.b #".",(a3)+
  13157.     bne.b awdbxx1        ;fail
  13158.     cmp.b #"l",(a3)+    ;bxx.l
  13159.     bne.b awdbxx1        ;fail
  13160. algcc0:    bsr.w asstab
  13161. alongbxx=*-assubs
  13162.     bsr.w atolong_
  13163.     subq.l #2,d0
  13164.     sub.l para-base(a6),d0
  13165.     bra.w storelong
  13166.  
  13167. ashortcc=*-assubs
  13168.     bsr.w assccode
  13169.     cmp.b #".",(a3)+
  13170.     bne.b ashbxx1        ;fail
  13171.     moveq #"b",d0
  13172.     sub.b (a3)+,d0
  13173.     beq.b ashort0
  13174.     cmp.b #"b"-"s",d0    ;clone
  13175.     bne.b ashbxx1        ;fail
  13176. ashort0:bsr.w asstab
  13177. ashortbxx=*-assubs
  13178. ashbxx:    bsr.w atolong_
  13179.     subq.l #2,d0
  13180.     sub.l para-base(a6),d0
  13181.     or.b d0,op68000+1-base(a6)
  13182.     beq.b ashbxx1
  13183.     bpl.b ashbxx0
  13184.     not.l d0
  13185. ashbxx0:moveq #$7f,d1
  13186.     cmp.l d1,d0
  13187.     bls.b ashbxx2
  13188. ashbxx1:sf d7
  13189. ashbxx2:rts
  13190.  
  13191. aeatoax=*-assubs
  13192.     bsr.w assea
  13193.     bra.w asstoax9b
  13194.  
  13195. aea2todx=*-assubs
  13196.     move.b #2,imsize-base(a6)
  13197.     bra.b aea2dx
  13198. aeatodx=*-assubs
  13199.     move.b #1,imsize-base(a6)
  13200. aea2dx:
  13201. asize67eatodx=*-assubs
  13202.     bsr.w assea
  13203.     bra.w asstodx9b
  13204.  
  13205. adxtoea=*-assubs
  13206.     bsr.w assdx9b
  13207.     bra.w asstoea
  13208.  
  13209. aiwordtoccr=*-assubs
  13210.     cmp.b #"#",(a3)+
  13211.     bne.w fail
  13212.     bsr.w atobyte_
  13213.     bsr.w storeword
  13214.     lea toccrtxt(pc),a0
  13215.     bra.w cmptxt
  13216. aiwordtosr=*-assubs
  13217.     bsr.b aiwrd
  13218.     lea tosrtxt(pc),a0
  13219.     bra.w cmptxt
  13220. aiword=*-assubs
  13221. aiwrd:    cmp.b #"#",(a3)+
  13222.     bne.w fail
  13223.     bsr.w atoword_
  13224.     bra.w storeword
  13225. alpstop=*-assubs
  13226.     move.w #$01c0,d0
  13227.     bsr.w storeinstr
  13228.     bra.b aiwrd
  13229. atbl=*-assubs
  13230.     moveq #0,d0    ;unsigned
  13231.     moveq #"u",d1
  13232.     sub.b (a3)+,d1
  13233.     beq.b atblu
  13234.     add.b #"s"-"u",d1
  13235.     bne.w fail
  13236.     bset #11,d0    ;signed
  13237. atblu:    cmp.b #"n",(a3)
  13238.     bne.b atbln
  13239.     bset #10,d0    ;round
  13240.     addq.w #1,a3
  13241. atbln:    cmp.b #".",(a3)+
  13242.     bne.w fail
  13243.     moveq #"b",d1
  13244.     sub.b (a3)+,d1
  13245.     beq.b atblb
  13246.     bset #6,d0
  13247.     cmp.b #"b"-"w",d1
  13248.     beq.b atblb
  13249.     cmp.b #"b"-"l",d1
  13250.     bne.w fail
  13251.     eor.b #%11000000,d0
  13252. atblb:    bsr.w storeinstr    
  13253.     bsr.w asstab
  13254.     cmp.b #"d",(a3)+
  13255.     bne.b atblea
  13256.     bsr.w assxx02
  13257.     cmp.b #":",(a3)+
  13258.     bne.w fail
  13259.     bsr.w assdn02
  13260.     or.b d0,op68000+3-base(a6)
  13261.     bra.b atbld    
  13262. atblea:    subq.w #1,a3
  13263.     bsr.w assea
  13264.     bset #0,op68000+2-base(a6)
  13265. atbld:    cmp.b #",",(a3)+
  13266.     bne.w fail
  13267.     bsr.w assdn02
  13268.     rol.w #4,d0
  13269.     or.b d0,op68000+2-base(a6)
  13270.     rts    
  13271. afpu=*-assubs
  13272.     sf d7
  13273.     rts
  13274. afmovemx=*-assubs
  13275.     moveq #0,d0
  13276.     bsr.w storeinstr
  13277.     cmp.b #"d",(a3)
  13278.     beq.b afmvmx0        ;dynamic mask
  13279.     cmp.b #"f",(a3)
  13280.     beq.b afmvmx0
  13281.     bsr assea
  13282.     cmp.b #",",(a3)+
  13283.     bne.w fail
  13284.     bra assfprx
  13285. afmvmx0:bset #13,op68000+2-base(a6)
  13286.     bsr assfprx
  13287.     bsr asstoea
  13288.     moveq #%111000,d0
  13289.     and.w op68000-base(a6),d0
  13290.     beq.w fail        ;dn
  13291.     cmp.b #%001000,d0    ;an
  13292.     beq.w fail
  13293.     cmp.b #%111100,d0    ;#
  13294.     beq.w fail
  13295.     cmp.b #%100000,d0    ;-(an)?
  13296.     bne.b afmvmx1
  13297.     move.b op68000+3-base(a6),d1    ;rl
  13298.     moveq #8-1,d0
  13299. afmvmx2:lsr.b #1,d1
  13300.     roxl.b #1,d2
  13301.     dbf d0,afmvmx2
  13302.     move.b d2,op68000+3-base(a6)
  13303.     bclr #12,op68000+2-base(a6)    ;predec mode
  13304. afmvmx1:rts    
  13305.     
  13306.  
  13307. afmoveml=*-assubs
  13308.     st d5
  13309.     bra.b afmovem
  13310. afmovel=*-assubs
  13311.     sf d5            ;fmovem flag
  13312. afmovem:moveq #0,d4        ;fpcr counter
  13313.     move.w #$8000,d0
  13314.     bsr.w storeinstr
  13315.     move.b #%010,imsize-base(a6)    ;long
  13316.     pea fpiar0(pc)        ;fpiar,An check
  13317.     cmp.b #"f",(a3)
  13318.     bne.b afpcr1
  13319.     bset #13,op68000+2-base(a6)
  13320.     bsr.b afpcr
  13321.     bra asstoea
  13322. afpcr1:    bsr assea
  13323.     cmp.b #",",(a3)+
  13324.     bne.b fpfail
  13325. afpcr:    cmp.b #"f",(a3)+
  13326.     bne.b fpfail
  13327.     cmp.b #"p",(a3)+
  13328.     bne.b fpfail
  13329.     moveq #12,d2
  13330.     cmp.b #"c",(a3)
  13331.     beq.b afpcr0
  13332.     moveq #11,d2
  13333.     cmp.b #"s",(a3)
  13334.     beq.b afpcr0
  13335.     moveq #10,d2
  13336.     cmp.b #"i",(a3)+
  13337.     bne.b fpfail
  13338.     cmp.b #"a",(a3)
  13339.     bne.b fpfail
  13340. afpcr0:    addq.w #1,a3
  13341.     cmp.b #"r",(a3)+
  13342.     bne.b fpfail
  13343.     bset d2,op68000+2-base(a6)
  13344.     addq.b #1,d4        ;fpcr counter
  13345.     cmp.b #"/",(a3)
  13346.     bne.b afpcr2
  13347.     tst.b d5        ;fmovem flag
  13348.     beq.b fpfail    
  13349.     addq.w #1,a3
  13350.     bra.b afpcr
  13351. afpcr2:    rts
  13352. fpiar0:    moveq #%111000,d0
  13353.     and.b op68000+1-base(a6),d0    ;ea field
  13354.     bne.b fpiar1            ;Dn?
  13355.     cmp.b #1,d4            ;1 fpcr?
  13356.     bne.b fpfail
  13357. fpiar1:    subq.b #%001000,d0        ;An
  13358.     bne.b fpcrok
  13359.     cmp.b #1,d4            ;1 fpcr?
  13360.     bne.b fpfail
  13361.     btst #10,op68000+2-base(a6)    ;fpiar?
  13362.     bne.b fpcrok
  13363. fpfail:    sf d7
  13364. fpcrok:    rts
  13365.  
  13366. afmovecr=*-assubs
  13367.     cmp.b #"#",(a3)+
  13368.     bne.w fail
  13369.     bsr.w atobyte_
  13370.     beq.b amfk0
  13371.     cmp.b #$3f,d0
  13372.     bhi.w fail
  13373.     cmp.b #$0b,d0
  13374.     bcs.w fail
  13375.     cmp.b #$0f,d0
  13376.     bls.b amfk0
  13377.     cmp.b #$30,d0
  13378.     bcs.w fail 
  13379. amfk0:    or.w #$5c00,d0
  13380.     bsr.w storeword
  13381.     bra.w asstofpx79
  13382.  
  13383. assfprx:move.w #$d000,d0    ;postincr/cntrl mode
  13384.     cmp.b #"d",(a3)    ;dynamic mask?
  13385.     bne.b arxmvm2
  13386.     addq.w #1,a3
  13387.     move.b (a3)+,d0
  13388.     sub.b #"0",d0
  13389.     bcs.b arxfail
  13390.     cmp.b #7,d0
  13391.     bhi.b arxfail
  13392.     lsl.b #4,d0
  13393.     bset #11,d0    ;dynamic
  13394.     bra.b arxmvm1    
  13395. arxmvm2:cmp.b #"f",(a3)+
  13396.     bne.b arxfail
  13397.     cmp.b #"p",(a3)+
  13398.     bne.b arxfail
  13399.     move.b (a3)+,d1
  13400.     sub.b #"0",d1
  13401.     bcs.b arxfail
  13402.     cmp.b #7,d1
  13403.     bhi.b arxfail
  13404.     moveq #7,d3
  13405.     sub.b d1,d3
  13406.     bset d3,d0
  13407. arxmvm4:cmp.b #",",(a3)
  13408.     beq.b arxmvm1
  13409.     cmp.b #"/",(a3)+
  13410.     beq.b arxmvm2
  13411.     cmp.b #"-",-1(a3)
  13412.     bne.b arxmvm1
  13413.     cmp.b #"f",(a3)+
  13414.     bne.b arxfail
  13415.     cmp.b #"p",(a3)+
  13416.     bne.b arxfail
  13417.     move.b (a3)+,d2
  13418.     sub.b #"0",d2
  13419.     bcs.b arxfail
  13420.     cmp.b #7,d2
  13421.     bhi.b arxfail
  13422.     cmp.b d1,d2
  13423.     bls.b arxfail
  13424. arxmvm3:addq.b #1,d1
  13425.     moveq #7,d3
  13426.     sub.b d1,d3
  13427.     bset d3,d0    
  13428.     cmp.b d1,d2
  13429.     bne.b arxmvm3
  13430.     bra.b arxmvm4
  13431. arxmvm1:or.w d0,op68000+2-base(a6)
  13432.     rts
  13433. arxfail:bra fail
  13434.     
  13435. apccodewordrel=*-assubs
  13436.     bsr.w asspccode
  13437.     bra.b accode1
  13438. afccodewordrel=*-assubs
  13439.     bsr.w assfccode
  13440. accode1:bsr.w storeinstr    ;instr
  13441.     bra.b accode0        ;4bytes instrlen ok (oma bug)
  13442. accodewordrel=*-assubs
  13443.     bsr.w assccode
  13444. accode0:bsr.w asstab
  13445.     bsr.w assdx02
  13446.     cmp.b #",",(a3)+
  13447.     beq.w awdrel
  13448.     sf d7
  13449.     rts
  13450. ainibtoea=*-assubs
  13451.     cmp.b #"#",(a3)+
  13452.     bne.w fail
  13453.     bsr.w atodnib
  13454.     cmp.b #31,d0
  13455.     bhi.w fail
  13456.     bsr.w storeinstr
  13457.     bra.w asstoea
  13458.  
  13459. apccodeea=*-assubs
  13460.     bsr.w asspccode
  13461.     bra.b asrc1
  13462. afccodeea=*-assubs
  13463.     bsr.w assfccode
  13464. asrc1:    bsr.w storeinstr
  13465.     bra.b asrc0
  13466. accodeea=*-assubs
  13467.     bsr.w assccode
  13468. asrc0:    bsr.w asstab
  13469. asrcea=*-assubs
  13470.     bra.w assea
  13471.  
  13472. aimoves=*-assubs
  13473.     bsr.w storeinstr    ;space
  13474.     moveq #0,d3
  13475.     cmp.b #",",2(a3)    ;xx,<ea>
  13476.     bne.b actlmvs
  13477.     bset #11,d3
  13478.     bsr.w amvcreg
  13479.     addq.w #1,a3
  13480.     bsr.w assea
  13481.     bra.b aimvs0
  13482. actlmvs:bsr.w assea
  13483.     cmp.b #",",(a3)+
  13484.     bne.w fail
  13485.     bsr.w amvcreg
  13486. aimvs0:    move.w d3,op68000+2-base(a6)
  13487.     rts
  13488.  
  13489. asize8eatoax9b=*-assubs
  13490.     bsr.w assea
  13491.     bra.w asstoax9b
  13492.  
  13493. asize67ixtoea=*-assubs
  13494.     cmp.b #"#",(a3)
  13495.     bne.w fail
  13496.     bsr.w assea        ;#$xx.x
  13497.     bra.w asstoea        ;clr previous ea !
  13498.  
  13499. asize67i9btoea=*-assubs
  13500.     cmp.b #"#",(a3)+
  13501.     bne.w fail
  13502.     bsr.w atobyte
  13503.     beq.w fail
  13504.     cmp.b #8,d0
  13505.     bhi.w fail    
  13506.     bne.b ai9b0
  13507.     sf d0
  13508. ai9b0:    add.b d0,d0
  13509.     or.b d0,op68000-base(a6)
  13510.     bra.w asstoea
  13511.  
  13512. asize67x9btodx02=*-assubs
  13513.     cmp.b #"#",(a3)+
  13514.     bne.b ashft0
  13515.     bsr.w atobyte
  13516.     beq.w fail
  13517.     cmp.b #8,d0
  13518.     bhi.w fail
  13519.     bne.b ashft1
  13520.     sf d0
  13521. ashft1:    add.b d0,d0
  13522.     or.b d0,op68000-base(a6)
  13523.     bra.w asstodx02
  13524. ashft0:    bset #5,op68000+1-base(a6)
  13525.     subq.w #1,a3
  13526.     bsr.w assdx9b
  13527.     bra.w asstodx02
  13528.  
  13529. aitrap=*-assubs
  13530.     cmp.b #"#",(a3)+
  13531.     bne.w fail
  13532.     bsr.w atodnib
  13533.     cmp.b #15,d0
  13534.     bhi.w fail
  13535.     or.b d0,op68000+1-base(a6)
  13536.     rts
  13537. asrcdx02=*-assubs
  13538.     bra.w assdx02
  13539. aimusp=*-assubs
  13540.     lea usptxt(pc),a0
  13541.     cmp.b #"a",(a3)
  13542.     beq.b aimusp0
  13543.     bset #3,op68000+1-base(a6)
  13544.     bsr.b aimusp1
  13545.     cmp.b #",",(a3)+
  13546.     bra.w assax02
  13547. aimusp0:bsr.w assax02
  13548.     cmp.b #",",(a3)+
  13549.     bne.w fail
  13550. aimusp1:bra.w cmptxt
  13551.  
  13552. apmovefd=*-assubs            ;68030mmu only
  13553.     move.w #$0100,d0
  13554.     bsr.b apmvfd
  13555.     move.w op68000+2-base(a6),d0
  13556.     cmp.w #$4100,d0            ;40:tc
  13557.     beq.w apfdok
  13558.     eor.w #%0000100100000000,d0    ;08:tt0,0c:tt1,48:srp,4c:crp
  13559.     and.w #%1011101111111111,d0
  13560.     bne.w fail
  13561. apfdok:    rts
  13562. apmove=*-assubs
  13563.     bsr.b apreg
  13564.     move.l a1,a3        ;restore ptr
  13565.     tas d7            ;fail?, ignore fail
  13566.     beq.b afromea
  13567. apmv2ea:move.w #$200,d0
  13568.     bsr.w storeinstr
  13569.     bsr.b apreg
  13570.     bra.w asstoea
  13571. afromea:moveq #0,d0
  13572. apmvfd:    bsr.w storeinstr
  13573.     bsr.w assea
  13574.     cmp.b #",",(a3)+
  13575.     bne.w fail
  13576. apreg:    lea pregs(pc),a0
  13577.     move.l a3,a1
  13578. aprglp:    move.b (a0)+,d1
  13579.     beq.w fail
  13580. aprgcmp:moveq #$7f,d0
  13581.     and.b (a0),d0
  13582.     cmp.b (a3)+,d0
  13583.     bne.b aprgskp
  13584.     tst.b (a0)+
  13585.     bpl.b aprgcmp
  13586.     bra.b aprok
  13587. aprgskp:tst.b (a0)+
  13588.     bpl.b aprgskp
  13589.     move.l a1,a3
  13590.     bra.b aprglp
  13591. aprok:    or.b d1,op68000+2-base(a6)
  13592.     rts
  13593. aidbcac=*-assubs
  13594. aidb3:    move.b (a3)+,d1
  13595.     cmp.b #"c",(a3)+
  13596.     bne.b aidb2
  13597.     moveq #4-1,d0
  13598.     lea idctx(pc),a0
  13599. aidb1:    cmp.b (a0,d0.w),d1
  13600.     beq.b aidb0
  13601.     dbf d0,aidb1
  13602. aidb2:    bra.w fail
  13603. aidb0:    lsl.w #6,d0
  13604.     or.w d0,op68000-base(a6) 
  13605.     rts
  13606. aidbind=*-assubs
  13607.     bsr.b aidb3
  13608.     cmp.b #",",(a3)+
  13609.     bne.w fail
  13610. apflush40=*-assubs
  13611.     cmp.b #"(",(a3)+
  13612.     bne.w fail
  13613.     bsr.w assax02
  13614.     cmp.b #")",(a3)+
  13615.     bne.w fail
  13616.     rts
  13617.  
  13618. aimovec=*-assubs
  13619.     moveq #0,d3
  13620.     cmp.b #"t",(a3)        ;movec tc, (68040)
  13621.     beq.b actlmvc
  13622.     cmp.b #",",2(a3)    ;xx,xxx(x)
  13623.     bne.b actlmvc
  13624.     bset #0,op68000+1-base(a6)
  13625.     bsr.b amvcreg
  13626.     addq.w #1,a3    ;cmp.b #",",(a3)+ bne.w fail
  13627.     bsr.b actrlmv
  13628.     bra.b aimvc0
  13629. actlmvc:bsr.b actrlmv
  13630.     cmp.b #",",(a3)+
  13631.     bne.w fail
  13632.     bsr.b amvcreg
  13633. aimvc0:    move.w d3,d0
  13634.     bra.w storeword
  13635. actrlmv:lea cregs-6(pc),a2
  13636. actrl1:    addq.w #6,a2
  13637.     tst.b (a2)
  13638.     bmi.w actrl4
  13639.     moveq #0,d1
  13640. actrl2:    move.b 2(a2,d1.w),d0
  13641.     beq.b actrl0
  13642.     cmp.b (a3,d1.w),d0
  13643.     bne.b actrl1
  13644.     addq.b #1,d1
  13645.     cmp.b #4,d1
  13646.     bne.b actrl2    
  13647. actrl0:    or.w (a2),d3
  13648.     add.w d1,a3
  13649.     rts
  13650. actrl4:    sf d7        ;fail
  13651.     rts
  13652. amvcreg:move.b (a3)+,d0
  13653.     cmp.b #"d",d0
  13654.     beq.b mvcdx
  13655.     bset #15,d3    ;ax
  13656.     cmp.b #"a",d0
  13657.     bne.w actrl4
  13658. mvcdx:    bsr.w assrn02
  13659.     ror.w #4,d0
  13660.     or.w d0,d3    ;ax/dx
  13661.     rts
  13662.  
  13663. abfieldtodx=*-assubs
  13664.     bsr.b abfi3
  13665.     cmp.b #",",(a3)+
  13666.     bne.w fail
  13667.     cmp.b #"d",(a3)+
  13668.     bne.w fail
  13669.     moveq #0,d3
  13670.     bsr.b mvcdx
  13671.     or.w d3,op68000+2-base(a6)
  13672.     rts
  13673. adxtobfield=*-assubs
  13674.     cmp.b #"d",(a3)+
  13675.     bne.w fail
  13676.     moveq #0,d3
  13677.     bsr.b mvcdx
  13678.     cmp.b #",",(a3)+
  13679.     bne.w fail
  13680.     bsr.b abfi3
  13681.     or.w d3,op68000+2-base(a6)
  13682.     rts
  13683. abfield=*-assubs
  13684. abfi3:    bsr.w storeinstr
  13685.     bsr.w assea
  13686.     cmp.b #"{",(a3)+
  13687.     bne.w fail
  13688.     bsr.b abfi2
  13689.     and.w #%111111,d0
  13690.     lsl.w #6,d0
  13691.     move.w d0,d2
  13692.     cmp.b #":",(a3)+
  13693.     bne.w fail
  13694.     bsr.b abfi2
  13695.     and.w #%111111,d0
  13696.     or.w d2,d0
  13697.     cmp.b #"}",(a3)+
  13698.     bne.w fail
  13699.     move.w d0,op68000+2-base(a6)
  13700.     rts
  13701. abfi2:    cmp.b #"d",(a3)
  13702.     beq.b abfi1
  13703.     bsr.w atodnib
  13704.     beq.w fail
  13705.     cmp.b #32,d0
  13706.     bhi.w fail
  13707.     bclr #5,d0    ;bitfield32=0
  13708.     rts
  13709. abfi1:    addq.w #1,a3
  13710.     move.b (a3)+,d0
  13711.     sub.b #"0",d0
  13712.     bcs.w fail
  13713.     cmp.b #7,d0
  13714.     bhi.w fail
  13715.     bset #5,d0
  13716.     rts
  13717. abkpt=*-assubs
  13718.     cmp.b #"#",(a3)+
  13719.     bne.w fail
  13720.     bra.w assxx02
  13721. apack=*-assubs
  13722.     cmp.b #"-",(a3)
  13723.     bne.b apadx
  13724.     addq.w #1,a3
  13725.     cmp.b #"(",(a3)+
  13726.     bne.w fail
  13727.     bsr.w assax02
  13728.     lea xbcdtxt(pc),a0
  13729.     bsr.w cmptxt
  13730.     bsr.w assax9b
  13731.     cmp.b #")",(a3)+
  13732.     bne.w fail
  13733.     bset #3,op68000+1-base(a6)
  13734.     bra.b apad0
  13735. apadx:    bsr.w assdx02
  13736.     bsr.w asstodx9b
  13737. apad0:    cmp.b #",",(a3)+
  13738.     bne.w fail
  13739.     bra.w aiwrd
  13740. amov16=*-assubs
  13741.     cmp.b #"(",(a3)+
  13742.     bne.w fail
  13743.     bsr.w assax02
  13744.     lea cmpmtxt(pc),a0
  13745.     bsr.w cmptxt
  13746.     bsr.w assan02
  13747.     ror.w #4,d0
  13748.     or.w #$8000,d0
  13749.     bra.w storeinstr
  13750. amov162=*-assubs
  13751.     cmp.b #"a",1(a3)    ;(ax)
  13752.     bne.b amov0
  13753.     cmp.b #"(",(a3)+
  13754.     bne.w fail
  13755.     bsr.w assax02
  13756.     cmp.b #")",(a3)+
  13757.     bne.w fail
  13758.     moveq #%000000,d1
  13759.     cmp.b #"+",(a3)+
  13760.     beq.b amov1
  13761.     subq.w #1,a3
  13762.     moveq #%010000,d1
  13763. amov1:    cmp.b #",",(a3)+
  13764.     bne.w fail
  13765.     or.b d1,op68000+1-base(a6)
  13766. amov2:    move.w op68000-base(a6),-(a7)
  13767.     bsr.w assea
  13768.     moveq #%111111,d0
  13769.     and.w op68000-base(a6),d0
  13770.     move.w (a7)+,op68000-base(a6)
  13771.     cmp.w #%111001,d0
  13772.     bne.w fail
  13773.     rts
  13774. amov0:    bsr.b amov2
  13775.     cmp.b #",",(a3)+
  13776.     bne.w fail
  13777.     cmp.b #"(",(a3)+
  13778.     bne.w fail
  13779.     bsr.w assax02
  13780.     cmp.b #")",(a3)+
  13781.     bne.w fail
  13782.     moveq #%001000,d1
  13783.     cmp.b #"+",(a3)+
  13784.     beq.b amov3
  13785.     moveq #%011000,d1
  13786. amov3:    or.b d1,op68000+1-base(a6)
  13787.     rts
  13788.  
  13789. aimove=*-assubs
  13790.     moveq #%01,d0
  13791.     sf imsize-base(a6)
  13792.     cmp.b #"b",(a3)
  13793.     beq.b aimov0
  13794.     moveq #%11,d0
  13795.     addq.b #1,imsize-base(a6)
  13796.     cmp.b #"w",(a3)
  13797.     beq.b aimov0
  13798.     moveq #%10,d0
  13799.     addq.b #1,imsize-base(a6)
  13800.     cmp.b #"l",(a3)
  13801.     bne.w fail
  13802. aimov0:    lsl.b #4,d0
  13803.     or.b d0,op68000-base(a6)
  13804.     addq.w #1,a3
  13805.     bsr.w asstab
  13806.     bsr.w assea
  13807.     move.w op68000-base(a6),-(a7)
  13808.     bsr.w asstoea
  13809.     move.w op68000-base(a6),d1
  13810.     move.w (a7)+,op68000-base(a6)
  13811.     move.w d1,d0
  13812.     and.w #%111,d0
  13813.     ror.w #7,d0
  13814.     or.w d0,op68000-base(a6)
  13815.     and.w #%111000,d1
  13816.     lsl.w #3,d1
  13817.     or.w d1,op68000-base(a6)
  13818.     rts
  13819. aimoveq=*-assubs
  13820.     sf imsize-base(a6)
  13821.     bsr.w assea
  13822.     move.w op68000-base(a6),d0
  13823.     clr.l oplen-base(a6)
  13824.     and.w #%111111,d0    ;#x
  13825.     cmp.w #%111100,d0
  13826.     bne.w fail
  13827.     move.b op68000+3-base(a6),op68000+1-base(a6)
  13828.     bra.w asstodx9b
  13829. aicallm=*-assubs
  13830.     cmp.b #"#",(a3)+
  13831.     bne.w fail
  13832.     bsr.w atobyte_        ;d0.l
  13833.     bsr.w storeinstr
  13834.     bra.w asstoea
  13835.  
  13836. acas=*-assubs
  13837.     bsr.b assdn02
  13838.     move.w d0,d2
  13839.     cmp.b #",",(a3)+
  13840.     bne.w fail
  13841.     bsr.b assdn02
  13842.     lsl.w #6,d0
  13843.     or.w d2,d0
  13844.     bsr.w storeinstr
  13845.     bra.w asstoea
  13846.  
  13847. assan02:cmp.b #"a",(a3)+
  13848.     bne.w fail
  13849.     bra.b assrn02
  13850. assdn02:cmp.b #"d",(a3)+
  13851.     bne.w fail
  13852. assrn02:move.b (a3)+,d0
  13853.     sub.b #"0",d0
  13854.     bcs.w fail
  13855.     cmp.b #7,d0
  13856.     bhi.w fail
  13857.     ext.w d0
  13858.     rts
  13859. acas2=*-assubs
  13860.     cmp.b #"w",(a3)
  13861.     beq.b aca0    
  13862.     cmp.b #"l",(a3)
  13863.     bne.w fail
  13864.     bset #9,op68000-base(a6)
  13865. aca0:    addq.w #1,a3
  13866.     bsr.w asstab
  13867.     bsr.b assdn02
  13868.     swap d0
  13869.     cmp.b #":",(a3)+
  13870.     bne.b cas2fl
  13871.     bsr.b assdn02
  13872.     move.l d0,d1
  13873.     cmp.b #",",(a3)+
  13874.     bne.b cas2fl
  13875.     bsr.b assdn02
  13876.     swap d0
  13877.     cmp.b #":",(a3)+
  13878.     bne.b cas2fl
  13879.     bsr.b assdn02
  13880.     lsl.l #6,d0
  13881.     or.l d0,d1
  13882.     cmp.b #",",(a3)+
  13883.     bne.b cas2fl
  13884.     cmp.b #"(",(a3)+
  13885.     bne.b cas2fl
  13886.     moveq #0,d3
  13887.     bsr.w amvcreg
  13888.     cmp.b #")",(a3)+
  13889.     bne.b cas2fl
  13890.     cmp.b #":",(a3)+
  13891.     bne.b cas2fl
  13892.     cmp.b #"(",(a3)+
  13893.     bne.b cas2fl
  13894.     swap d3
  13895.     bsr.w amvcreg
  13896.     cmp.b #")",(a3)+
  13897.     bne.b cas2fl
  13898.     or.l d1,d3
  13899.     move.l d3,d0
  13900.     bra.w storelong
  13901. cas2fl:    sf d7
  13902.     rts
  13903. achk2=*-assubs
  13904.     move.w #$0800,d3
  13905.     bra.b achkcmp
  13906. acmp2=*-assubs
  13907.     moveq #0,d3
  13908. achkcmp:bsr.w storeinstr
  13909.     bsr.w assea
  13910.     cmp.b #",",(a3)+
  13911.     bne.b cas2fl
  13912.     bsr.w amvcreg    ;or.w ?,d3
  13913.     move.w d3,op68000+2-base(a6)
  13914.     rts
  13915.  
  13916. artm=*-assubs
  13917.     moveq #0,d3
  13918.     bsr.w amvcreg
  13919.     rol.w #4,d3
  13920.     or.w d3,op68000-base(a6)    ;0000ynnn
  13921.     rts
  13922.  
  13923. atppccsize=*-assubs
  13924.     bsr.w asspccode
  13925.     bra.b atpc2
  13926. atpfccsize=*-assubs
  13927.     bsr.w assfccode
  13928. atpc2:    bsr.w storeinstr
  13929.     bra.b atpc1
  13930. atpccsize=*-assubs
  13931.     bsr.w assccode
  13932. atpc1:    cmp.b #".",(a3)+
  13933.     bne.w fail
  13934.     move.b (a3)+,d0
  13935.     bsr.w asstab
  13936.     cmp.b #"w",d0
  13937.     beq.w aiwrd
  13938.     cmp.b #"l",d0
  13939.     bne.w fail
  13940.     bset #0,op68000+1-base(a6)
  13941. atpc0:    cmp.b #"#",(a3)+
  13942.     bne.w fail
  13943.     bsr.w atolong_
  13944.     bra.w storelong
  13945. atpcc=*-assubs
  13946.     bsr.w assccode
  13947.     cmp.b #" ",(a3)+
  13948.     bne.w fail
  13949.     rts
  13950.  
  13951. apvalid=*-assubs
  13952.     bsr.w assan02
  13953.     or.w #$2c00,d0
  13954.     bsr.b afstore
  13955.     bra.w asstoea
  13956. atppcc=*-assubs
  13957.     bsr.w asspccode
  13958.     bra.b afst0
  13959. atpfcc=*-assubs
  13960.     bsr.w assfccode
  13961. afst0:    cmp.b #" ",(a3)+
  13962.     bne.w fail
  13963. afstore:bra.w storeinstr
  13964.  
  13965. afnop=*-assubs
  13966.     moveq #0,d0        ;4byte command
  13967.     bra.b afstore
  13968. apflusha=*-assubs
  13969.     move.w #$2400,d0
  13970.     bra.b afstore
  13971. apflushr=*-assubs
  13972.     move.w #$a000,d0
  13973.     bsr.b afstore
  13974.     bra.w assea
  13975. apflushs=*-assubs
  13976.     move.w #$3400,d3    
  13977.     bra.b apfl3
  13978. apflush=*-assubs
  13979.     move.w #$3000,d3    
  13980. apfl3:    move.b (a3)+,d2
  13981.     cmp.b #"f",(a3)
  13982.     bne.b apfl1
  13983.     addq.w #1,a3
  13984.     cmp.b #"c",(a3)+
  13985.     bne.w fail
  13986.     moveq #%00000000,d1
  13987.     cmp.b #"s",d2
  13988.     beq.b apfl2
  13989.     moveq #%00000001,d1
  13990.     cmp.b #"d",d2
  13991.     beq.b apfl2
  13992.     bra.w fail
  13993. apfl1:    moveq #%00010000,d1
  13994.     moveq #"#",d0
  13995.     sub.b d2,d0
  13996.     beq.b apfl0
  13997.     cmp.b #"#"-"d",d0
  13998.     bne.w fail
  13999.     moveq #%00001000,d1
  14000. apfl0:    bsr.w assrn02
  14001.     or.w d0,d1
  14002. apfl2:    cmp.b #",",(a3)+
  14003.     bne.w fail
  14004.     cmp.b #"#",(a3)+
  14005.     bne.w fail
  14006.     bsr.w assrn02
  14007.     lsl.w #5,d0
  14008.     or.w d1,d0
  14009.     or.w d3,d0    ;$3000|$3400
  14010.     bra.b afstore
  14011. apload=*-assubs
  14012.     move.w #$2010,d1
  14013. apte0:    moveq #"w",d0
  14014.     sub.b (a3)+,d0
  14015.     beq.b aplo0
  14016.     bset #9,d1
  14017.     subq.b #"w"-"r",d0
  14018.     bne.w fail
  14019. aplo0:    bsr.w asstab
  14020.     cmp.b #"#",(a3)+
  14021.     bne.w fail
  14022.     bsr.w assrn02
  14023.     or.w d1,d0
  14024.     bsr.w afstore    
  14025.     bra.w asstoea
  14026. aptest=*-assubs
  14027.     move.w #$8110,d1
  14028.     bsr.b apte0
  14029.     cmp.b #",",(a3)+
  14030.     bne.w fail
  14031.     cmp.b #"#",(a3)+
  14032.     bne.w fail
  14033.     bsr.w assrn02
  14034.     ror.w #6,d0
  14035.     beq.w fail    ;level 0?
  14036.     move.w d0,d1
  14037.     cmp.b #",",(a3)+
  14038.     bne.w fail
  14039.     cmp.b #"a",(a3)+
  14040.     bne.w fail
  14041.     bsr.w assrn02
  14042.     rol.w #5,d0
  14043.     or.w d1,d0
  14044.     or.w d0,op68000+2-base(a6)
  14045.     rts
  14046.     
  14047. adivsll=*-assubs
  14048.     move.w #$800,d0
  14049.     bra.b adivs0
  14050. adivull=*-assubs
  14051.     moveq #0,d0
  14052. adivs0:    bsr.w storeinstr
  14053.     move.b #%10,imsize-base(a6)
  14054.     bsr.w assea
  14055.     cmp.b #",",(a3)+
  14056.     bne.w fail
  14057.     bsr.w assdn02        ;d0.w
  14058.     move.w d0,d3
  14059.     cmp.b #":",(a3)+
  14060.     bne.w fail
  14061.     bsr.w assdn02
  14062.     cmp.b d0,d3
  14063.     beq.w fail
  14064.     bra.b notwo    
  14065. amulsl=*-assubs
  14066.     move.w #$800,d0
  14067.     bra.b amuls0
  14068. amulul=*-assubs
  14069.     moveq #0,d0
  14070. amuls0:    bsr.w storeinstr
  14071.     move.b #%10,imsize-base(a6)
  14072.     bsr.w assea
  14073.     cmp.b #",",(a3)+
  14074.     bne.w fail
  14075.     bsr.w assdn02        ;d0.w
  14076.     move.w d0,d3
  14077.     cmp.b #":",(a3)+
  14078.     bne.b notwo
  14079.     bset #10,d3
  14080.     bsr.w assdn02
  14081. notwo:    ror.w #4,d0        ;mulx.l ea,dm:dm=dn
  14082.     or.w d0,d3
  14083.     or.w d3,op68000+2-base(a6)    
  14084.     rts
  14085.  
  14086. aicmpm=*-assubs
  14087.     cmp.b #"(",(a3)+
  14088.     bne.w fail
  14089.     bsr.w assax02
  14090.     lea cmpmtxt(pc),a0
  14091.     bsr.w cmptxt
  14092.     bsr.w assax9b
  14093.     cmp.b #")",(a3)+
  14094.     bne.w fail
  14095.     cmp.b #"+",(a3)+
  14096.     bne.w fail
  14097.     rts
  14098.  
  14099. asize67adsbx=*-assubs        ;same!
  14100. axbcd=*-assubs
  14101. aasxbcd:cmp.b #"-",(a3)+
  14102.     bne.b axbcd0
  14103.     bset #3,op68000+1-base(a6)
  14104.     cmp.b #"(",(a3)+
  14105.     bne.b axbcd2        ;fail
  14106.     bsr.w assax02
  14107.     lea xbcdtxt(pc),a0
  14108.     bsr.w cmptxt
  14109.     bsr.w assax9b
  14110.     cmp.b #")",(a3)+
  14111.     beq.b axbcd1        ;no fail
  14112. axbcd2:    sf d7
  14113. axbcd1:    rts
  14114. axbcd0:    subq.w #1,a3
  14115.     bsr.w assdx02
  14116.     bra.w asstodx9b
  14117.  
  14118. asize6movep=*-assubs
  14119.     cmp.b #"d",(a3)
  14120.     beq.b amovp0
  14121.     bsr.w assea
  14122.     move.w op68000-base(a6),d0
  14123.     bclr #5,op68000+1-base(a6)
  14124.     and.w #%111000,d0
  14125.     cmp.w #%101000,d0
  14126.     bne.w fail
  14127.     bra.w asstodx9b
  14128. amovp0:    bset #7,op68000+1-base(a6)
  14129.     bsr.w assdx9b
  14130.     bsr.w asstoea
  14131.     move.w op68000-base(a6),d0
  14132.     bclr #5,op68000+1-base(a6)
  14133.     and.w #%111000,d0
  14134.     cmp.w #%101000,d0
  14135.     bne.w fail
  14136.     rts
  14137. aimovem=*-assubs
  14138.     moveq #0,d0
  14139.     bsr storeinstr
  14140.     cmp.b #"d",(a3)
  14141.     beq.b aimovm0
  14142.     cmp.b #"a",(a3)
  14143.     beq.b aimovm0
  14144.     bset #10,op68000-base(a6)
  14145.     bsr.w assea
  14146.     cmp.b #",",(a3)+
  14147.     bne.w fail
  14148.     bsr.b assrx
  14149.     bra.b aimovm7
  14150. aimovm0:bsr.b assrx
  14151.     bsr.w asstoea
  14152. aimovm7:moveq #%111000,d0
  14153.     and.w op68000-base(a6),d0
  14154.     cmp.w #%100000,d0    ;-(an)
  14155.     bne.b aimovm8
  14156.     move.w op68000+2-base(a6),d1    ;rl
  14157.     moveq #16-1,d0
  14158. aimovm9:lsr.w #1,d1
  14159.     roxl.w #1,d2
  14160.     dbf d0,aimovm9
  14161.     move.w d2,op68000+2-base(a6)
  14162. aimovm8:rts
  14163. assrx:    clr.w d0
  14164. aimovm2:move.b 1(a3),d1
  14165.     sub.b #"0",d1
  14166.     bcs.w fail
  14167.     cmp.b #7,d1
  14168.     bhi.w fail
  14169.     cmp.b #"d",(a3)
  14170.     beq.b aimovm5
  14171.     cmp.b #"a",(a3)
  14172.     bne.w fail
  14173.     addq.b #8,d1
  14174. aimovm5:addq.w #2,a3
  14175.     bset d1,d0
  14176. aimovm4:cmp.b #",",(a3)
  14177.     beq.b aimovm1
  14178.     cmp.b #"/",(a3)+
  14179.     beq.b aimovm2
  14180.     cmp.b #"-",-1(a3)
  14181.     bne.b aimovm1
  14182.     move.b 1(a3),d2
  14183.     sub.b #"0",d2
  14184.     bcs.w fail
  14185.     cmp.b #7,d2
  14186.     bhi.w fail
  14187.     cmp.b #"d",(a3)
  14188.     beq.b aimovm6
  14189.     cmp.b #"a",(a3)
  14190.     bne.w fail
  14191.     addq.b #8,d2
  14192. aimovm6:addq.w #2,a3
  14193.     cmp.b d1,d2
  14194.     bls.w fail
  14195. aimovm3:addq.b #1,d1
  14196.     bset d1,d0    
  14197.     cmp.b d1,d2
  14198.     bne.b aimovm3
  14199.     bra.b aimovm4
  14200. aimovm1:move.w d0,op68000+2-base(a6)
  14201.     rts
  14202.  
  14203. adx9btodx02=*-assubs
  14204.     bsr.b assdx9b
  14205.     bra.b asstodx02
  14206. aax9btoax02=*-assubs
  14207.     bsr.b assax9b
  14208.     bra.b asstoax02
  14209. adx9btoax02=*-assubs
  14210.     bsr.b assdx9b
  14211.     bra.b asstoax02
  14212. aiunlk=*-assubs
  14213.     bra.b assax02
  14214. alinklg=*-assubs
  14215.     bsr.b assax02
  14216.     cmp.b #",",(a3)+
  14217.     bne.b fail
  14218.     bra.w atpc0
  14219. ailink=*-assubs
  14220.     bsr.b assax02
  14221.     cmp.b #",",(a3)+
  14222.     bne.b fail
  14223.     bra.w aiwrd
  14224.  
  14225. asstoax9b:cmp.b #",",(a3)+
  14226.     bne.b fail
  14227. assax9b:cmp.b #"a",(a3)+
  14228.     beq.b assxx9b
  14229.     bra.b fail
  14230. asstodx9b:cmp.b #",",(a3)+
  14231.     bne.b fail
  14232. assdx9b:cmp.b #"d",(a3)+
  14233.     bne.b fail
  14234. assxx9b:move.b (a3)+,d0
  14235.     sub.b #"0",d0
  14236.     bcs.b fail
  14237.     cmp.b #7,d0
  14238.     bhi.b fail    
  14239.     lsl.w #8,d0
  14240.     add.w d0,d0            ;asl.w #1,d0
  14241.     or.w d0,op68000-base(a6)
  14242.     rts
  14243. asstoax02:cmp.b #",",(a3)+
  14244.     bne.b fail
  14245. assax02:cmp.b #"a",(a3)+
  14246.     bne.b fail
  14247.     bra.b assxx02
  14248. asstodx02:cmp.b #",",(a3)+
  14249.     bne.b fail
  14250. assdx02:cmp.b #"d",(a3)+
  14251.     bne.b fail
  14252. assxx02:move.b (a3)+,d0
  14253.     sub.b #"0",d0
  14254.     bcs.b fail
  14255.     cmp.b #7,d0
  14256.     bhi.b fail
  14257.     or.b d0,op68000+1-base(a6)
  14258.     rts
  14259. fail:    sf d7
  14260.     rts
  14261. asstofpx79:
  14262.     cmp.b #",",(a3)+
  14263.     bne.b fail
  14264. assfpx79:cmp.b #"f",(a3)+
  14265.     bne.b fail
  14266.     cmp.b #"p",(a3)+
  14267.     bne.b fail
  14268.     move.b (a3)+,d0
  14269.     sub.b #"0",d0
  14270.     bcs.b fail
  14271.     cmp.b #7,d0
  14272.     bhi.b fail
  14273.     ext.w d0
  14274.     lsl.w #7,d0
  14275.     or.w d0,op68000+2-base(a6)    ;fpu instr!
  14276.     rts
  14277. assccode:clr.w d0
  14278.     lea ccodetxt(pc),a0
  14279. asscc0:    move.b (a3),d1
  14280.     lsl.w #8,d1
  14281.     move.b 1(a3),d1
  14282.     tst.b 1(a0)        ;"t",0;"f",0
  14283.     bne.b asscc2
  14284.     sf d1
  14285. asscc2:    cmp.w (a0)+,d1
  14286.     beq.b asscc1
  14287.     add.w #$0100,d0
  14288.     cmp.w #$1000,d0
  14289.     bne.b asscc0
  14290.     bra.b fail
  14291. asscc1:    addq.w #1,a3
  14292.     tst.b d1        ;"t",0;"f",0
  14293.     beq.b asscc3
  14294.     addq.w #1,a3
  14295. asscc3:    or.w d0,op68000-base(a6)
  14296.     rts
  14297.  
  14298. assfccode:
  14299.     moveq #[32-1]*4,d0
  14300. assfcc2:lea fccodetxt(pc),a0
  14301.     lea (a0,d0.w),a0
  14302.     move.l a3,-(a7)
  14303.     moveq #4-1,d1
  14304. assfcc0:cmpm.b (a3)+,(a0)+
  14305.     bne.b assfcc1
  14306.     tst.b (a0)
  14307.     dbeq d1,assfcc0
  14308.     cmp.b #"e",(a3)        ;ngle preference
  14309.     beq.b assfcc1
  14310.     addq.w #4,a7        ;remove a3
  14311.     lsr.w #2,d0
  14312.     rts        
  14313. assfcc1:move.l (a7)+,a3
  14314.     subq.w #4,d0
  14315.     bpl.b assfcc2
  14316.     bra.w fail
  14317.  
  14318. asspccode:
  14319.     move.b (a3)+,d1
  14320.     lsl.w #8,d1
  14321.     move.b (a3)+,d1
  14322.     lea pccodetxt(pc),a0
  14323.     moveq #[16-1]*2,d0
  14324. asspcc0:cmp.w (a0,d0.w),d1
  14325.     beq.b asspcc1
  14326.     subq.w #2,d0
  14327.     bpl.b asspcc0
  14328.     bra.w fail
  14329. asspcc1:lsr.w #1,d0
  14330.     rts
  14331.  
  14332. cmpt0:    cmp.b (a3)+,d0
  14333.     bne.w fail
  14334. cmptxt:    move.b (a0)+,d0
  14335.     bclr #7,d0
  14336.     beq.b cmpt0
  14337.     cmp.b (a3)+,d0
  14338.     bne.w fail
  14339.     rts
  14340.  
  14341. storeinstr:addq.l #2,lginstr-base(a6)
  14342. storeword:
  14343.     lea op68000-2-base(a6),a0
  14344.     move.w (a0),d1        ;oplen!
  14345.     addq.w #1,(a0)+
  14346.     add.w d1,d1
  14347.     move.w d0,2(a0,d1.w)
  14348.     rts
  14349. storelong:
  14350.     lea op68000-2-base(a6),a0
  14351.     move.w (a0),d1        ;oplen!
  14352.     addq.w #2,(a0)+
  14353.     add.w d1,d1
  14354.     move.l d0,2(a0,d1.w)
  14355.     rts
  14356.  
  14357. asstab:    cmp.l lineend-base(a6),a3
  14358.     bhi.w fail
  14359.     cmp.b #" ",(a3)+
  14360.     beq.b asstab
  14361. asstab0:subq.w #1,a3
  14362.     rts    
  14363.  
  14364. asstoea:cmp.b #",",(a3)+
  14365.     bne.w fail
  14366. assea:    and.w #$ffc0,op68000-base(a6)
  14367.     cmp.b #"d",(a3)            ;dx
  14368.     beq.w assdx02
  14369.     or.w #$0008,op68000-base(a6)
  14370.     cmp.b #"a",(a3)            ;ax
  14371.     beq.w assax02
  14372.     and.w #$ffc0,op68000-base(a6)
  14373.     cmp.b #"(",(a3)            ;(ax)|(ax)+
  14374.     bne.b assea0
  14375.     cmp.b #"a",1(a3)
  14376.     bne.b assea0
  14377.     addq.w #1,a3
  14378.     or.w #$0010,op68000-base(a6)
  14379.     bsr.w assax02
  14380.     cmp.b #")",(a3)+
  14381.     bne.w fail
  14382.     cmp.b #"+",(a3)
  14383.     bne.b assea1
  14384.     addq.w #1,a3
  14385.     or.w #$0018,op68000-base(a6)
  14386. assea1:    rts
  14387. assea0:    cmp.b #"-",(a3)        ;-(ax)
  14388.     bne.b assea2
  14389.     cmp.b #"(",1(a3)
  14390.     bne.w fail
  14391.     addq.w #2,a3
  14392.     or.w #$0020,op68000-base(a6)
  14393.     bsr.w assax02
  14394.     cmp.b #")",(a3)+
  14395.     bne.w fail
  14396.     rts
  14397. assea2:    cmp.b #"#",(a3)
  14398.     bne.b assea3
  14399.     addq.w #1,a3
  14400.     or.w #$003c,op68000-base(a6)
  14401.     cmp.b #34,(a3)
  14402.     bne.b assea16
  14403.     addq.w #1,a3
  14404.     moveq #0,d0
  14405.     moveq #5-1,d1
  14406. assea18:cmp.b #34,(a3)+
  14407.     beq.b assea17
  14408.     lsl.l #8,d0
  14409.     move.b -1(a3),d0
  14410.     dbf d1,assea18
  14411.     bra.w fail
  14412. assea16:cmp.b #"$",(a3)
  14413.     beq.b assea22
  14414.     bsr.w atodlong
  14415.     bra.b assea17
  14416. assea22:bsr.w atolong_
  14417. assea17:move.b imsize-base(a6),d1
  14418.     beq.b assea13
  14419.  
  14420.     cmp.b #%01,d1
  14421.     beq.b assea14
  14422.     cmp.b #%10,d1
  14423.     bne.w fail
  14424.     swap d0
  14425.     bsr.b assea15
  14426.     swap d0
  14427.     bra.b assea15
  14428. assea13:cmp.l #$ff,d0
  14429.     bhi.w fail
  14430. assea14:cmp.l #$ffff,d0
  14431.     bhi.w fail
  14432. assea15:bra.w storeword    
  14433.  
  14434. assea3:    cmp.b #"(",(a3)+    ;(x.l),(x.w),(d,ax,rx.x)
  14435.     bne.w fail
  14436.     sf d2
  14437.     cmp.b #"-",(a3)        ;sign?
  14438.     bne.b assea19
  14439.     addq.w #1,a3
  14440.     st d2
  14441. assea19:move.w d2,-(a7)
  14442.     cmp.b #"$",(a3)
  14443.     beq.b assea24
  14444.     bsr.w atodlong
  14445.     bra.b assea23
  14446. assea24:bsr.w atolong_
  14447. assea23:move.w (a7)+,d2
  14448.     cmp.b #",",(a3)        ;d(    !(d,    ?
  14449.     bne.w assea4
  14450.     tst.b d2
  14451.     beq.b assea20
  14452.     neg.l d0
  14453. assea20:addq.w #1,a3
  14454.     cmp.b #"a",(a3)        ;d(ax    !(d,ax
  14455.     bne.w assea5
  14456.     move.l d0,-(a7)
  14457.     bsr.w assax02
  14458.     move.l (a7)+,d0
  14459.     move.l d0,d1
  14460.     bpl.b assea21
  14461.     neg.l d1
  14462. assea21:cmp.b #")",(a3)+    ;d(ax)    !(d,ax)
  14463.     bne.b assea6
  14464.     or.w #$0028,op68000-base(a6)
  14465.     cmp.l #$ffff,d1        ;abs(d0)
  14466.     bhi.w fail
  14467.     bra.w storeword
  14468. assea6:    cmp.b #",",-1(a3)    ;    !(d,ax,rx.x)
  14469.     bne.w fail
  14470.     or.w #$0030,op68000-base(a6)
  14471.     cmp.l #$ff,d1        ;abs(d0)
  14472.     bhi.w fail
  14473. assea9:    and.w #$ff,d0
  14474.     cmp.b #"d",(a3)+
  14475.     beq.b assea7
  14476.     cmp.b #"a",-1(a3)
  14477.     bne.w fail
  14478.     bset #15,d0
  14479. assea7:    move.b (a3)+,d1
  14480.     sub.b #"0",d1
  14481.     bcs.w fail        
  14482.     cmp.b #7,d1
  14483.     bhi.w fail
  14484.     ext.w d1
  14485.     ror.w #4,d1
  14486.     or.w d1,d0
  14487.     cmp.b #".",(a3)+
  14488.     bne.w fail
  14489.     cmp.b #"w",(a3)+
  14490.     beq.b assea8
  14491.     cmp.b #"l",-1(a3)
  14492.     bne.w fail
  14493.     bset #11,d0
  14494. assea8:    cmp.b #"*",(a3)
  14495.     bne.b assea8b
  14496.     addq.w #1,a3
  14497.     moveq #-"1",d1
  14498.     add.b (a3)+,d1
  14499.     beq.b assea8b
  14500.     or.w #%01000000000,d0
  14501.     subq.b #1,d1
  14502.     beq.b assea8b
  14503.     eor.w #%11000000000,d0
  14504.     subq.b #2,d1
  14505.     beq.b assea8b
  14506.     eor.w #%01000000000,d0
  14507.     subq.b #4,d1
  14508.     bne.w fail        
  14509. assea8b:cmp.b #")",(a3)+    ;d(ax,rx.x)    !(d,ax,rx.x)
  14510.     bne.w fail
  14511.     bra.w storeword
  14512. assea5:    cmp.b #"p",(a3)+
  14513.     bne.w fail
  14514.     cmp.b #"c",(a3)+
  14515.     bne.w fail
  14516.     cmp.b #")",(a3)+        ;d(pc)    !(d,pc)
  14517.     bne.b assea10
  14518.     or.w #$003a,op68000-base(a6)
  14519.     subq.l #2,d0            ;fixed instr len
  14520.     sub.l lginstr-base(a6),d0        ;extension (mulx.l,cas2...)
  14521.     sub.l para-base(a6),d0
  14522.     bsr.w storeword
  14523.     move.l d0,d1
  14524.     ext.l d1
  14525.     cmp.l d0,d1
  14526.     bne.w fail
  14527.     rts
  14528. assea10:or.w #$003b,op68000-base(a6)
  14529.     subq.l #2,d0            ;fixed instr len
  14530.     sub.l lginstr-base(a6),d0        ;extension (mulx.l,cas2...)
  14531.     sub.l para-base(a6),d0
  14532.     move.b d0,d1
  14533.     ext.w d1
  14534.     ext.l d1
  14535.     cmp.l d1,d0
  14536.     bne.b assfail
  14537.     cmp.b #",",-1(a3)
  14538.     beq.w assea9            ;d(pc,rx.x)    !(d,pc,rx.x)
  14539. assfail:sf d7
  14540.     rts
  14541. assea4:    cmp.b #")",(a3)+
  14542.     bne.w fail
  14543.     cmp.b #".",(a3)
  14544.     beq.b assea11
  14545.     or.w #$0039,op68000-base(a6)
  14546.     swap d0
  14547.     bsr.w storeword
  14548.     swap d0
  14549.     bra.w storeword
  14550. assea11:addq.w #1,a3
  14551.     cmp.b #"w",(a3)+    
  14552.     bne.w fail
  14553.     or.w #$0038,op68000-base(a6)
  14554.     cmp.l #$ffff,d0
  14555.     bhi.w fail
  14556.     bra.w storeword
  14557.  
  14558. ;gfxname:dc.b "graphics.library",0
  14559.     even
  14560. ;hang the pope
  14561.     dc.b version
  14562. initxt:    dc.b "BeerMon V0."
  14563.     dc.b version/10+"0",-version/10*10+version+"0",rev
  14564.     dc.b " 680"!$80,"0,"!$80
  14565.     dc.b " GfxMem,"!$80
  14566.     dc.b " mode, morbid version"!$80
  14567. mmutxt:    dc.b "NoMMU"!$80,"68851"!$80,"(MMU)"!$80,"(MMU)"!$80
  14568. fputxt:    dc.b "NoFPU"!$80,"68881"!$80,"68882"!$80,"(FPU)"!$80
  14569. chiptxt:dc.b "512K"!$80,"1 MB"!$80,"1.5M"!$80,"2 MB"!$80
  14570. muttxt:    dc.b "mutilating"!$80
  14571. frztxt:    dc.b "deep frost"!$80        ;one of the celtic ones?
  14572.  
  14573. trktxt:    dc.b ": track "!$80
  14574. hedtxt:    dc.b " head "!$80
  14575. sectxt:    dc.b " sector "!$80
  14576. blktxt:    dc.b " block "!$80
  14577. drvtxt:    dc.b " Disk in drive DFn: is "!$80
  14578. nodisk:    dc.b "not present"!$80
  14579. ndostxt:dc.b "not a dos disk"!$80
  14580. dskvtxt:dc.b "not validated"!$80
  14581. filesys:dc.b "Filesystem: "!$80,"not international nFS, "!$80
  14582. chktxt:    dc.b "without correct checksum"!$80
  14583. wrdisk:    dc.b "writeprotected"!$80
  14584. logtxt:    dc.b "logged"!$80
  14585. mnttxt:    dc.b "not mounted"!$80
  14586. bpltxt:    dc.b "Mem: "!$80
  14587. worktxt:dc.b "Scr"!$80
  14588. abstxt:    dc.b "(ABS) "!$80
  14589. systxt:    dc.b "(SYS) "!$80
  14590. codetxt:dc.b " Code "!$80
  14591. buftxt:    dc.b " Exg"!$80
  14592. navltxt:dc.b " not available"!$80
  14593. filltxt:dc.b " filled with "!$80
  14594. eortxt:    dc.b " exored with "!$80
  14595. abotxt:    dc.b "function aborted at "!$80
  14596. objtxt:    dc.b "object created: "!$80
  14597. expetxt:dc.b "cannot decrunch data"!$80
  14598. expotxt:dc.b "decrunched data: "!$80
  14599. impetxt:dc.b "cannot crunch data"!$80
  14600. impatxt:dc.b "crunch aborted"!$80
  14601. impotxt:dc.b ", crunched data: "!$80
  14602. togotxt:dc.b "to go:"!$80        ;\
  14603. gaintxt:dc.b " gained:"!$80        ;/
  14604. nmmutxt:dc.b "You don't have a MMU!"!$80
  14605. nmmutx1:dc.b "You don't have a 68851 MMU!"!$80
  14606. nmmutx2:dc.b "68040 MMU is not supported yet!"!$80
  14607. brktxt:    dc.b "Breakpoint "!$80
  14608. bpnoram:dc.b "not in RAM!"!$80
  14609. bpextxt:dc.b "exists"!$80
  14610. bpnftxt:dc.b "not found"!$80
  14611. bpstxt:    dc.b "set"!$80
  14612. bprmtxt:dc.b "removed"!$80
  14613. bpfltxt:dc.b "buffer full"!$80
  14614. bpbctxt:dc.b "buffer cleared"!$80
  14615. chktxt1:dc.b "old chksum: "!$80
  14616. chktxt2:dc.b " new chksum: "!$80
  14617. nkicktx:dc.b "No Kickstart!"!$80
  14618. nmgdtxt:dc.b "No Megadrive ROM!"!$80
  14619. smdinva:dc.b "Invalid header"!$80
  14620. smdxfer:dc.b "Current address "!$80
  14621. smdtogo:dc.b ", blocks to go "!$80
  14622. smdcvco:dc.b "Conversion completed"!$80
  14623. smdabor:dc.b "Transfer aborted"!$80
  14624. smdcomp:dc.b "Transfer completed"!$80
  14625. smdtime:dc.b "Transfer timeout"!$80
  14626. nametxt:dc.b "Name:"!$80
  14627. mromtxt:dc.b "KB ROM, "!$80
  14628. backtxt:dc.b " backed up"    ;\
  14629. mramtxt:dc.b " RAM, "!$80    ;/
  14630. manutxt:dc.b "manu:"!$80    ;\
  14631. mvertxt:dc.b ", v:"!$80        ;/
  14632. maptxt:    dc.b "Mode:nD, Bitmap is "!$80,"invalid ("!$80
  14633. synctxt:dc.b "Sync: "!$80
  14634. invltxt:dc.b " (invalid)"!$80
  14635. voltxt:    dc.b "Volume: ",34!$80
  14636. dirtxt:    dc.b "(Dir)"!$80
  14637. dlnktxt:dc.b "dirlink:  ",34!$80
  14638. flnktxt:dc.b "hardlink: ",34!$80
  14639. usdtxt:    dc.b " used blocks, "!$80
  14640. fretxt:    dc.b " free blocks"!$80
  14641. bytetxt:dc.b " free bytes"!$80
  14642. savetxt:dc.b "saving: ",34!$80
  14643. loadtxt:dc.b "loading: ",34!$80
  14644. typetxt:dc.b "typing: ",34!$80
  14645. rerrtxt:dc.b "read error ("!$80
  14646. veritxt:dc.b "verify error ("!$80
  14647. retrytx:dc.b "(r)etry, (i)gnore, (a)bort"!$80
  14648. trk0txt:dc.b "seek error (30), track 0 not found"!$80
  14649. bittxt:    dc.b "bad bitmap"!$80
  14650. dskftxt:dc.b "disk full"!$80
  14651. nenotxt:dc.b "not enough free space"!$80
  14652. dnmtxt:    dc.b "directory not empty"!$80
  14653. dextxt:    dc.b "directory exists"!$80
  14654. diftxt:    dc.b "directory is a file"!$80
  14655. dnftxt:    dc.b "directory not found"!$80
  14656. fextxt:    dc.b "file exists"!$80
  14657. fidtxt:    dc.b "file is a directory"!$80
  14658. fnftxt:    dc.b "file not found"!$80
  14659. formtxt:dc.b "Formatting track nn head 0"!$80
  14660. fcpltxt:dc.b "Formatting completed"!$80 
  14661. fabotxt:dc.b "Formatting aborted"!$80 
  14662. insttxt:dc.b "disk installed"!$80
  14663. smaptxt:dc.b "Active keymap: usa"!$80,"german"!$80
  14664. calctxt:dc.b "Overflow"!$80
  14665. prttxt:    dc.b "Printer "!$80
  14666. vfytxt:    dc.b "Verify "!$80
  14667. sndtxt:    dc.b "Soundaddress "!$80
  14668. memtxt:    dc.b " lower     first     upper     size    attr pri      name"!$80
  14669. rsrctxt:dc.b "address                                              name"!$80
  14670. intrtxt:dc.b "address                                              name"!$80
  14671. exectxt:dc.b "address   open  ver   rev   nsize psize chksum       name"!$80
  14672. porttxt:dc.b "address   flag  sigbit sigtask                       name"!$80
  14673. tasktxt:dc.b "address   type     pri state   splower   size  used  name"!$80
  14674. rsndtxt:dc.b "address   type      pri                name"!$80
  14675. corrtxt:dc.b "exec lists corrupt"!$80
  14676. conftxt:dc.b "board    type address-range       size flags product manu "
  14677.     dc.b " serialnum romoffset"!$80
  14678. nobdtxt:dc.b "no unconfigured boards found!"!$80
  14679. unkntxt:dc.b "unknown"!$80
  14680. zorro2:    dc.b "zorro-II"!$80
  14681. zorro3:    dc.b "zorro-III"!$80
  14682. a3info:    dc.b "Page Detect:"
  14683. a3stc:    dc.b "nnn Burst:"
  14684. a3burst:dc.b "nnn Wrap:"
  14685. a3bwrap:dc.b "nnn Chips:"
  14686. a3chips:dc.b "nnnnnnn Refresh Rate:"
  14687. a3refr:    dc.b "nnn Version:"!$80
  14688. a3info2:dc.b "Timeout:"!$80
  14689. a3disab:dc.b "disabled"!$80
  14690. a3dsack:dc.b "DSACK"!$80
  14691. a3berr:    dc.b "BERR"!$80
  14692. a3kbrst:dc.b " Keyboard Reset:o"!$80," ID:"!$80
  14693. ;    dc.b" DMAC:old"!$80,"new"!$80
  14694. resvtxt:dc.b "reserved"!$80
  14695. months:    dc.b "JanFebMarAprMayJunJulAugSepOctNovDec"
  14696.  
  14697. exctxt:    dc.b $3e,$80
  14698.     dc.b "BUS ERROR",$87
  14699.     dc.b "ADDRESS ERROR: INSTRUCTION $     ACCESSED"!$80
  14700.     dc.b "ILLEGAL",$81
  14701.     dc.b "DIVISION BY ZERO"!$80
  14702.     dc.b "CHK",$81
  14703.     dc.b "TRAPV",$81
  14704.     dc.b "PRIVILEGE",$84
  14705.     dc.b "TRACE MODE"!$80
  14706.     dc.b "LINE-A",$83
  14707.     dc.b "LINE-F",$83
  14708.     dc.b "($30)",$88
  14709.     dc.b "PROTOCOLL",$84
  14710.     dc.b "FORMAT ERROR",$87
  14711.     dc.b "UNINITIALISED",$82
  14712.     dc.b "($40)",$88
  14713.     dc.b "($44)",$88
  14714.     dc.b "($48)",$88
  14715.     dc.b "($4C)",$88
  14716.     dc.b "($50)",$88
  14717.     dc.b "($54)",$88
  14718.     dc.b "($58)",$88
  14719.     dc.b "($5C)",$88
  14720.     dc.b "SPURIOUS",$82
  14721.     dc.b "LEVEL 1",$82
  14722.     dc.b "LEVEL 2",$82
  14723.     dc.b "LEVEL 3",$82
  14724.     dc.b "LEVEL 4",$82
  14725.     dc.b "LEVEL 5",$82
  14726.     dc.b "LEVEL 6",$82
  14727.     dc.b "LEVEL 7",$82
  14728.     dc.b $85
  14729.     dc.b $85
  14730.     dc.b $85
  14731.     dc.b $85
  14732.     dc.b $85
  14733.     dc.b $85
  14734.     dc.b $85
  14735.     dc.b $85
  14736.     dc.b $85
  14737.     dc.b $85
  14738.     dc.b $85
  14739.     dc.b $85
  14740.     dc.b $85
  14741.     dc.b $85
  14742.     dc.b $85
  14743.     dc.b $85
  14744.     dc.b "BRANCH/UNORDERED",$86
  14745.     dc.b "INEXACT RESULT",$86
  14746.     dc.b "DIVISION BY ZERO",$86
  14747.     dc.b "UNDERFLOW",$86
  14748.     dc.b "OPERAND ERROR",$86
  14749.     dc.b "OVERFLOW",$86
  14750.     dc.b "SIGNAL NAN",$86
  14751.     dc.b "UNIMPLEMENTED DATA TYPE",$86
  14752.     dc.b "MMU SETUP",$87
  14753.     dc.b "68851_1",$87
  14754.     dc.b "68851_2",$87
  14755.     dc.b "($EC)",$88
  14756.     dc.b "($F0)",$88
  14757.     dc.b "($F4)",$88
  14758.     dc.b "($F8)",$88
  14759.     dc.b "($FC)",$88
  14760. excext:    dc.b $08,$80            ;$80
  14761.     dc.b " INSTRUCTION"!$80        ;$81
  14762.     dc.b " INTERRUPT"!$80        ;$82
  14763.     dc.b " EMULATION"!$80        ;$83
  14764.     dc.b " VIOLATION"!$80        ;$84
  14765.     dc.b "TRAP INSTRUCTION"!$80    ;$85
  14766.     dc.b " FPU EXCEPTION"!$80    ;$86
  14767.     dc.b " EXCEPTION"!$80        ;$87
  14768.     dc.b " RESERVED"!$80        ;$88
  14769.  
  14770. copmove:dc.b "Move"!$80
  14771. copskip:dc.b "Skip"!$80
  14772. copwait:dc.b "Wait"!$80
  14773. copendl:dc.b "EndList"!$80
  14774. copdcl:    dc.b "dc.l"!$80
  14775.         even
  14776. ccodetxt:    dc.b "t",0,"f",0,"hilscccsneeqvcvsplmigeltgtle"    ;even!
  14777. pccodetxt:    dc.b "bsbclslcssscasacwswcisicgsgccscc"    ;even!
  14778. fccodetxt:    dc.l "f"<<24    ;fpu condition codes
  14779.         dc.l "eq"<<16
  14780.         dc.l "ogt"<<8
  14781.         dc.l "oge"<<8
  14782.         dc.l "olt"<<8
  14783.         dc.l "ole"<<8
  14784.         dc.l "ogl"<<8
  14785.         dc.l "or"<<16
  14786.         dc.l "un"<<16
  14787.         dc.l "ueq"<<8
  14788.         dc.l "ugt"<<8
  14789.         dc.l "uge"<<8
  14790.         dc.l "ult"<<8
  14791.         dc.l "ule"<<8
  14792.         dc.l "ne"<<16
  14793.         dc.l "t"<<24
  14794.         dc.l "sf"<<16
  14795.         dc.l "seq"<<8
  14796.         dc.l "gt"<<16
  14797.         dc.l "ge"<<16
  14798.         dc.l "lt"<<16
  14799.         dc.l "le"<<16
  14800.         dc.l "gl"<<16
  14801.         dc.l "gle"<<8
  14802.         dc.l "ngle"
  14803.         dc.l "ngl"<<8
  14804.         dc.l "nle"<<8
  14805.         dc.l "nlt"<<8
  14806.         dc.l "nge"<<8
  14807.         dc.l "ngt"<<8
  14808.         dc.l "sne"<<8
  14809.         dc.l "st"<<16
  14810.  
  14811. fmconst:dc.b "1E"!$80,"Pi"!$80,"Log10(2)"!$80,"e"!$80,"Log2(e)"!$80
  14812.     dc.b "Log10(e)"!$80,"0.0"!$80,"ln(2)"!$80,"ln(10)"!$80
  14813.     dc.b "1"!$80,"10"!$80,"100"!$80
  14814.  
  14815. usptxt:        dc.b "usp"!$80
  14816. toccrtxt:    dc.b ","
  14817. ccrtxt:        dc.b "ccr"!$80
  14818. tosrtxt:    dc.b ","
  14819. srtxt:        dc.b "sr"!$80
  14820. xbcdtxt:    dc.b "),-("!$80
  14821. cmpmtxt:    dc.b ")+,("!$80
  14822.         even
  14823. cregs:        dc.b $08,$07,"srp",0    ;68040
  14824.         dc.b $08,$06,"urp",0    ;68040
  14825.         dc.b $08,$05,"mmur"    ;68040
  14826.         dc.b $08,$04,"isp",0
  14827.         dc.b $08,$03,"msp",0
  14828.         dc.b $08,$02,"caar"    ;68020/30 only
  14829.         dc.b $08,$01,"vbr",0
  14830.         dc.b $08,$00,"usp",0
  14831.         dc.b $00,$07,"dtt1"    ;68040
  14832.         dc.b $00,$06,"dtt0"    ;68040
  14833.         dc.b $00,$05,"itt1"    ;68040
  14834.         dc.b $00,$04,"itt0"    ;68040
  14835.         dc.b $00,$03,"tc",0,0    ;68040
  14836.         dc.b $00,$02,"cacr"
  14837.         dc.b $00,$01,"dfc",0
  14838.         dc.b $00,$00,"sfc",0
  14839.         dc.b $80
  14840. pregs:        dc.b $08,"tt0"!$80
  14841.         dc.b $0c,"tt1"!$80
  14842.         dc.b $40,"tc"!$80
  14843.         dc.b $44,"drp"!$80    ;68851 only
  14844.         dc.b $48,"srp"!$80
  14845.         dc.b $4c,"crp"!$80
  14846.         dc.b $50,"cal"!$80    ;68851 only
  14847.         dc.b $58,"scc"!$80    ;68851 only
  14848.         dc.b $5c,"ac"!$80    ;68851 only
  14849.         dc.b $60,"mmusr"!$80    ;68030 mmusr = 68851 psr
  14850.         dc.b $60,"psr"!$80    ;68030 mmusr = 68851 psr
  14851.         dc.b $64,"pcsr"!$80    ;68851 only
  14852.         dc.b $ac,"val"!$80,0    ;68851 only
  14853.  
  14854. sizemov:    dc.b "*blw",%11,%00,%10,%01
  14855. dcbtxt:        dc.b "dc.b "!$80
  14856.  
  14857. gortxt:    dc.b "holy hell,death to us,god is slaughtered,drink his blood"
  14858.  
  14859. typetab:    dc.b "Unknown"!$80
  14860.         dc.b "Task"!$80
  14861.         dc.b "Interpt."!$80
  14862.         dc.b "Device"!$80
  14863.         dc.b "MsgPort"!$80
  14864.         dc.b "Message"!$80
  14865.         dc.b "FreeMsg"!$80
  14866.         dc.b "ReplyMsg"!$80
  14867.         dc.b "Resource"!$80
  14868.         dc.b "Library"!$80
  14869.         dc.b "Memory"!$80
  14870.         dc.b "SoftInt"!$80
  14871.         dc.b "Font"!$80
  14872.         dc.b "Process"!$80
  14873.         dc.b "Semaphor"!$80
  14874. statetb:    dc.b "Invalid"!$80
  14875.         dc.b "Added"!$80
  14876.         dc.b "Running"!$80
  14877.         dc.b "Ready"!$80
  14878.         dc.b "Waiting"!$80
  14879.         dc.b "Except"!$80
  14880.         dc.b "Removed"!$80
  14881.     
  14882. helptxt:dc.b 'm <s><e>'!$80
  14883.     dc.b 'Memory Dump'!$80
  14884.     dc.b 'a <s><e>'!$80
  14885.     dc.b 'ASCII Dump'!$80
  14886.     dc.b 'bin<wltq> <s><e>'!$80
  14887.     dc.b 'Binary Dump'!$80
  14888.     dc.b 't [s][e][target]'!$80
  14889.     dc.b 'TransferMem'!$80
  14890.     dc.b 'c [s][e][target]'!$80
  14891.      dc.b 'CompareMem'!$80
  14892.     dc.b 'o [s][e][byte]'!$80
  14893.     dc.b 'Occupy Mem'!$80
  14894.     dc.b 'ow [s][e][word]'!$80
  14895.     dc.b 'Occupy Mem'!$80
  14896.     dc.b 'ol [s][e][longword]'!$80
  14897.     dc.b 'Occupy Mem'!$80
  14898.     dc.b 'e [s][e][byte]'!$80
  14899.     dc.b 'EXOR Mem'!$80
  14900.     dc.b 'ew [s][e][word]'!$80
  14901.     dc.b 'EXOR Mem'!$80
  14902.     dc.b 'el [s][e][longword]'!$80
  14903.     dc.b 'EXOR Mem'!$80
  14904.     dc.b 'nop [adr][num]'!$80
  14905.     dc.b 'Fill With NOP'!$80
  14906.     dc.b 'imp [s][e]<mode>'!$80
  14907.     dc.b 'Implode Memory'!$80
  14908.     dc.b 'exp [addr]'!$80
  14909.     dc.b 'Explode Memory'!$80
  14910.     dc.b 'f [s][e][b]<..>'!$80
  14911.     dc.b 'Find Bytes'!$80
  14912.     dc.b 'f [s][e]["text"]'!$80
  14913.     dc.b 'Find Text'!$80
  14914.     dc.b 'fmode [0|1|2]'!$80
  14915.     dc.b 'Show Tab|Hex|Text'!$80
  14916.     dc.b 'fi [s][e]["?*text"]'!$80
  14917.     dc.b 'Find Instr.'!$80
  14918.     dc.b 'F [addr]'!$80
  14919.     dc.b 'Find Branch'!$80
  14920.     dc.b 'F [addr] pc'!$80
  14921.     dc.b 'Find PC-rel.'!$80
  14922.     dc.b 'match [0]'!$80
  14923.     dc.b 'Show/Clr MatchBuf'!$80
  14924.     dc.b 'p [s][e]<period>'!$80
  14925.     dc.b 'Play Sample'!$80
  14926.     dc.b 'b <addr>'!$80
  14927.     dc.b 'View Bitplane'!$80
  14928.     dc.b 'cls'!$80
  14929.     dc.b 'Clear Screen'!$80
  14930.     dc.b 'B [rgb1] [rgb2]'!$80
  14931.     dc.b 'Set Colors'!$80
  14932.     dc.b 'W <addr>'!$80
  14933.     dc.b 'Move Workspace'!$80
  14934.     dc.b 'r <value register>'!$80
  14935.     dc.b 'Load CPU'!$80
  14936.     dc.b 'R'!$80
  14937.     dc.b 'Show FPU'!$80
  14938.     dc.b 'mmu'!$80
  14939.     dc.b 'Show MMU'!$80
  14940.     dc.b 'mmuon'!$80
  14941.     dc.b 'Enable MMU'!$80
  14942.     dc.b 'mmuoff'!$80
  14943.     dc.b 'Disable MMU'!$80
  14944.     dc.b 'settt0 [x]'!$80
  14945.     dc.b 'modify TT0 (MMU)'!$80
  14946.     dc.b 'settt1 [x]'!$80
  14947.     dc.b 'modify TT1 (MMU)'!$80
  14948.     dc.b 'settc [x]'!$80
  14949.     dc.b 'modify TC (MMU)'!$80
  14950.     dc.b 'setsrp [x y]'!$80
  14951.     dc.b 'modify SRP (MMU)'!$80
  14952.     dc.b 'setcrp [x y]'!$80
  14953.     dc.b 'modify CRP (MMU)'!$80
  14954.     dc.b 'setdrp [x y]'!$80
  14955.     dc.b 'modify DRP (MMU)'!$80
  14956.     dc.b 'setmmusr [x]'!$80
  14957.     dc.b 'modify SR (MMU)'!$80
  14958.     dc.b 'bl'!$80
  14959.     dc.b 'List Breakpoints'!$80
  14960.     dc.b 'bs [addr]'!$80
  14961.     dc.b 'Set Breakpoint'!$80
  14962.     dc.b 'bc [0|addr]'!$80
  14963.     dc.b 'Clr Breakpoint'!$80
  14964.     dc.b 'g [addr]'!$80
  14965.     dc.b 'Start Program'!$80
  14966.     dc.b 'i'!$80
  14967.     dc.b 'Display Vectors'!$80
  14968.     dc.b 'd <s><e>'!$80
  14969.     dc.b 'Disassemble 680x0'!$80
  14970.     dc.b 'dm'!$80
  14971.     dc.b 'Toggle Dec/Hex'!$80
  14972.     dc.b 'ds'!$80
  14973.     dc.b 'Toggle Signed'!$80
  14974.     dc.b 'dv'!$80
  14975.     dc.b 'Toggle Eff.Addr'!$80
  14976.     dc.b 'n [addr]'!$80
  14977.     dc.b 'Assemble 680x0'!$80
  14978.     dc.b 'u <s><e>'!$80
  14979.     dc.b 'Disassemble 65816'!$80
  14980.     dc.b 'N [addr]'!$80
  14981.     dc.b 'Assemble 65816'!$80
  14982.     dc.b 'accu [8|16]'!$80
  14983.     dc.b '65816 Accu Size'!$80
  14984.     dc.b 'index [8|16]'!$80
  14985.     dc.b '65816 Index Size'!$80
  14986.     dc.b 'auto'!$80
  14987.     dc.b '65816 Auto Size'!$80
  14988.     dc.b 'K <Fn ',39,'text1|text2..',39,'>'!$80
  14989.      dc.b 'Set FKey'!$80
  14990.     dc.b 'D <n>'!$80
  14991.     dc.b 'Select Drive'!$80
  14992.     dc.b 'dir <f>'!$80
  14993.     dc.b 'Show Directory'!$80
  14994.     dc.b 'bootsum [addr]'!$80
  14995.     dc.b 'Bootblk Checksum'!$80
  14996.     dc.b 'datasum [addr]'!$80
  14997.     dc.b 'Datablk Checksum'!$80
  14998.     dc.b 'bitsum [addr]'!$80
  14999.     dc.b 'Bitmap Checksum'!$80
  15000.     dc.b 'kicksum [addr]'!$80
  15001.     dc.b 'Kickstart Chk'!$80
  15002.     dc.b 'megasum [addr]'!$80
  15003.     dc.b 'Sega MD Checksum'!$80
  15004.     dc.b 'famisum [addr]'!$80
  15005.     dc.b 'Famicon Checksum'!$80
  15006.     dc.b 'rawplay [addr]'!$80
  15007.     dc.b 'Transfer Raw'!$80
  15008.     dc.b 'smdplay [addr]'!$80
  15009.     dc.b 'Transfer SMD'!$80
  15010.     dc.b 'famiplay [addr]'!$80
  15011.     dc.b 'Transfer SMC'!$80
  15012.     dc.b 'smd2raw [addr]'!$80
  15013.     dc.b 'Convert To Raw'!$80
  15014.     dc.b 'v <sync>'!$80
  15015.     dc.b 'Set Sync Word'!$80
  15016.     dc.b 'vc <track>'!$80
  15017.     dc.b 'Search Sync Word'!$80
  15018.     dc.b 'format [name]<q><0..3>'!$80
  15019.     dc.b 'Format Disk'!$80
  15020.     dc.b 'install <0..3|4>'!$80
  15021.     dc.b 'Install DOS\n|1.3'!$80
  15022.     dc.b 'verify'!$80
  15023.     dc.b 'Toggle Verify'!$80
  15024.     dc.b 'info'!$80
  15025.     dc.b 'Report Diskinfo'!$80
  15026.     dc.b 'M'!$80
  15027.     dc.b 'Show Block Map'!$80
  15028.     dc.b 'l [addr][cyl]<num>'!$80
  15029.     dc.b 'Read Cylinder'!$80
  15030.     dc.b 's [addr][cyl]<num>'!$80
  15031.     dc.b 'Write Cylinder'!$80
  15032.     dc.b 'l [addr][sec]<num> s'!$80
  15033.     dc.b 'Read Sector'!$80
  15034.     dc.b 's [addr][sec]<num> s'!$80
  15035.     dc.b 'Write Sector'!$80
  15036.     dc.b 'type "file"'!$80
  15037.     dc.b 'Type File'!$80
  15038.     dc.b 'L "file" [addr]'!$80
  15039.     dc.b 'Load File'!$80
  15040.     dc.b 'S "file" [s][e]'!$80
  15041.     dc.b 'Save File'!$80
  15042.     dc.b 'cd :'!$80
  15043.     dc.b 'Go To Rootdir'!$80
  15044.     dc.b 'cd [subdir]'!$80
  15045.     dc.b 'Change Dir'!$80
  15046.     dc.b 'mk [subdir]'!$80
  15047.     dc.b 'Make Directory'!$80
  15048.     dc.b 'del "file/dir"'!$80
  15049.     dc.b 'Delete File/Dir'!$80
  15050.     dc.b 'k'!$80
  15051.     dc.b 'Toggle Keymap'!$80
  15052.     dc.b 'config'!$80
  15053.     dc.b 'Config Boards'!$80
  15054.     dc.b 'gary'!$80
  15055.     dc.b 'A3000/A4000 Info'!$80
  15056.     dc.b 'ramsey'!$80
  15057.     dc.b 'A3000/A4000 Info'!$80
  15058.     dc.b 'P'!$80
  15059.     dc.b 'Toggle Printer'!$80
  15060.     dc.b 'h [beg][end]<dst><jmp>'!$80
  15061.     dc.b 'Create Hunk'!$80
  15062.     dc.b 'time'!$80
  15063.     dc.b 'Show Date/Time'!$80
  15064.     dc.b '/ [n]'!$80
  15065.     dc.b 'Show Systeminfo'!$80
  15066.     dc.b 'V <s><e>'!$80
  15067.     dc.b 'Disasm Copper'!$80
  15068.     dc.b 'cop <s e>'!$80
  15069.     dc.b 'Find Copperlists'!$80
  15070.     dc.b 'custom'!$80
  15071.     dc.b 'Customreg Help'!$80
  15072.     dc.b '? [value] <exp value>'!$80
  15073.     dc.b 'Calculator'!$80
  15074.     dc.b 'x'!$80
  15075.     dc.b 'quit'!$80
  15076.     dc.b 0
  15077.  
  15078. custnam:dc.b $0/2,"BltDDat"!$80
  15079.     dc.b $2/2,"DMAConR"!$80
  15080.     dc.b $4/2,"VPosR"!$80
  15081.     dc.b $6/2,"VHPosR"!$80
  15082.     dc.b $8/2,"DskDatR"!$80
  15083.     dc.b $e/2,"ClxDat"!$80
  15084.     dc.b $10/2,"ADKConR"!$80
  15085.     dc.b $16/2,"PotGoR"!$80
  15086.     dc.b $18/2,"SerDatR"!$80
  15087.     dc.b $1a/2,"DskBytR"!$80
  15088.     dc.b $1c/2,"IntEnaR"!$80
  15089.     dc.b $1e/2,"IntReqR"!$80
  15090.     dc.b $20/2,"DskPth"!$80
  15091.     dc.b $22/2,"DskPtl"!$80
  15092.     dc.b $24/2,"DskLen"!$80
  15093.     dc.b $26/2,"DskDat"!$80
  15094.     dc.b $28/2,"RefPtr"!$80
  15095.     dc.b $2a/2,"VPosW"!$80
  15096.     dc.b $2c/2,"VHPosW"!$80
  15097.     dc.b $2e/2,"CopCon"!$80
  15098.     dc.b $30/2,"SerDat"!$80
  15099.     dc.b $32/2,"SerPer"!$80
  15100.     dc.b $34/2,"PotGo"!$80
  15101.     dc.b $36/2,"JoyTest"!$80
  15102.     dc.b $38/2,"StrEqu"!$80
  15103.     dc.b $3a/2,"StrVbl"!$80
  15104.     dc.b $3c/2,"StrHor"!$80
  15105.     dc.b $3e/2,"StrLong"!$80
  15106. copname:dc.b $44/2,"BltAFWM"!$80
  15107.     dc.b $46/2,"BltALWM"!$80
  15108.     dc.b $48/2,"BltCPth"!$80
  15109.     dc.b $4a/2,"BltCPtl"!$80
  15110.     dc.b $4c/2,"BltBPth"!$80
  15111.     dc.b $4e/2,"BltBPtl"!$80
  15112.     dc.b $50/2,"BltAPth"!$80
  15113.     dc.b $52/2,"BltAPtl"!$80
  15114.     dc.b $54/2,"BltDPth"!$80
  15115.     dc.b $56/2,"BltDPtl"!$80
  15116.     dc.b $58/2,"BltSize"!$80
  15117.     dc.b $5a/2,"BltCon2"!$80    ;big agnus
  15118.     dc.b $5c/2,"BltSizV"!$80    ;big agnus
  15119.     dc.b $5e/2,"BltSizH"!$80    ;big agnus
  15120.     dc.b $60/2,"BltCMod"!$80
  15121.     dc.b $62/2,"BltBMod"!$80
  15122.     dc.b $64/2,"BltAMod"!$80
  15123.     dc.b $66/2,"BltDMod"!$80
  15124.     dc.b $70/2,"BltCDat"!$80
  15125.     dc.b $72/2,"BltBDat"!$80
  15126.     dc.b $74/2,"BltADat"!$80
  15127.     dc.b $78/2,"SprHDat"!$80    ;big agnus
  15128.     dc.b $7c/2,"DeniseID"!$80    ;big agnus
  15129.     dc.b $7e/2,"DskSync"!$80
  15130.     dc.b $8c/2,"CopIns"!$80 ;no effect
  15131.     dc.b $8e/2,"DiwStrt"!$80
  15132.     dc.b $90/2,"DiwStop"!$80
  15133.     dc.b $92/2,"DDFStrt"!$80
  15134.     dc.b $94/2,"DDFStop"!$80
  15135.     dc.b $96/2,"DMACon"!$80
  15136.     dc.b $98/2,"ClxCon"!$80
  15137.     dc.b $9a/2,"IntEna"!$80
  15138.     dc.b $9c/2,"IntReq"!$80
  15139.     dc.b $9e/2,"AdkCon"!$80
  15140.     dc.b $10c/2,"BplCon4"!$80    ;aga
  15141.     dc.b $10e/2,"ClxCon2"!$80    ;aga
  15142.     dc.b $1c0/2,"HTotal"!$80    ;big agnus
  15143.     dc.b $1c2/2,"HSStop"!$80    ;big agnus
  15144.     dc.b $1c4/2,"HBStrt"!$80    ;big agnus
  15145.     dc.b $1c6/2,"HBStop"!$80    ;big agnus
  15146.     dc.b $1c8/2,"VTotal"!$80    ;big agnus
  15147.     dc.b $1ca/2,"VSStop"!$80    ;big agnus
  15148.     dc.b $1cc/2,"VBStrt"!$80    ;big agnus
  15149.     dc.b $1ce/2,"VBStop"!$80    ;big agnus
  15150.     dc.b $1d0/2,"SprHStrt"!$80    ;big agnus
  15151.     dc.b $1d2/2,"SprHStop"!$80    ;big agnus
  15152.     dc.b $1d4/2,"BplHStrt"!$80    ;big agnus
  15153.     dc.b $1d6/2,"BplHStop"!$80    ;big agnus
  15154.     dc.b $1d8/2,"HHPosW"!$80    ;big agnus
  15155.     dc.b $1da/2,"HHPosR"!$80    ;big agnus
  15156.     dc.b $1dc/2,"BeamCon0"!$80    ;big agnus
  15157.     dc.b $1de/2,"HSStrt"!$80    ;big agnus
  15158.     dc.b $1e0/2,"VSStrt"!$80    ;big agnus
  15159.     dc.b $1e2/2,"HCenter"!$80    ;big agnus
  15160.     dc.b $1e4/2,"DiwHigh"!$80    ;big agnus
  15161.     dc.b $1e6/2,"BplHMod"!$80    ;big agnus
  15162.     dc.b $1e8/2,"SprHPth"!$80    ;big agnus
  15163.     dc.b $1ea/2,"SprHPtl"!$80    ;big agnus
  15164.     dc.b $1ec/2,"BplHPth"!$80    ;big agnus
  15165.     dc.b $1ee/2,"BplHPtl"!$80    ;big agnus
  15166.     dc.b $1fc/2,"FMode"!$80        ;aga
  15167.     dc.b $1fe/2,"CopNOP"!$80    ;needed
  15168.  
  15169. cust2nm:dc.b $a/2,$c/2,2/2,"Joy",0,"Dat"!$80        ;0,1
  15170.     dc.b $12/2,$14/2,2/2,"Pot",0,"Dat"!$80        ;0,1
  15171. cp2name:    ;first,last,step,name,nameindex,name!$80
  15172.     dc.b $40/2,$42/2,2/2,"BltCon",0," "!$80        ;0,1
  15173.     dc.b $80/2,$84/2,4/2,"Cop",1,"Lch"!$80        ;1,2
  15174.     dc.b $82/2,$86/2,4/2,"Cop",1,"Lcl"!$80        ;1,2
  15175.     dc.b $88/2,$8a/2,2/2,"CopJmp",1," "!$80        ;1,2
  15176.     dc.b $a0/2,$d0/2,16/2,"Aud",0,"Lch"!$80     ;0-3
  15177.     dc.b $a2/2,$d2/2,16/2,"Aud",0,"Lcl"!$80        ;0-3
  15178.     dc.b $a4/2,$d4/2,16/2,"Aud",0,"Len"!$80        ;0-3
  15179.     dc.b $a6/2,$d6/2,16/2,"Aud",0,"Per"!$80        ;0-3
  15180.     dc.b $a8/2,$d8/2,16/2,"Aud",0,"Vol"!$80        ;0-3
  15181.     dc.b $aa/2,$da/2,16/2,"Aud",0,"Dat"!$80        ;0-3
  15182.     dc.b $e0/2,$fc/2,4/2,"Bpl",1,"Pth"!$80        ;1-8
  15183.     dc.b $e2/2,$fe/2,4/2,"Bpl",1,"Ptl"!$80        ;1-8
  15184.     dc.b $100/2,$106/2,2/2,"BplCon",0," "!$80    ;0-3(ecs)
  15185.     dc.b $108/2,$10a/2,2/2,"Bpl",1,"Mod"!$80    ;1,2
  15186.     dc.b $110/2,$11e/2,2/2,"Bpl",1,"Dat"!$80 ;1-8 no effect
  15187.     dc.b $120/2,$13c/2,4/2,"Spr",0,"Pth"!$80    ;0-7
  15188.     dc.b $122/2,$13e/2,4/2,"Spr",0,"Ptl"!$80    ;0-7
  15189.     dc.b $140/2,$178/2,8/2,"Spr",0,"Pos"!$80    ;0-7
  15190.     dc.b $142/2,$17a/2,8/2,"Spr",0,"Ctl"!$80    ;0-7
  15191.     dc.b $144/2,$17c/2,8/2,"Spr",0,"DatA"!$80    ;0-7
  15192.     dc.b $146/2,$17e/2,8/2,"Spr",0,"DatB"!$80    ;0-7
  15193.     dc.b $180/2,$1be/2,2/2,"Color",0," "!$80    ;0-31
  15194.     dc.b -1
  15195.  
  15196. xopfail=0            ;dummy
  15197. xnoops=1
  15198. xdcwop=2
  15199. xeatoccr=3
  15200. xeatosr=4
  15201. xsrtoea=5
  15202. xwordbxx=6
  15203. xwordcc=7
  15204. xshortbxx=8
  15205. xshortcc=9
  15206. xeatoax=10
  15207. xeatodx=11
  15208. xdxtoea=12
  15209. xiwordtoccr=13
  15210. xiwordtosr=14
  15211. xiword=15
  15212. xccodewordrel=16
  15213. xinibtoea=17
  15214. xccodeea=18
  15215. xsrcea=19
  15216. xsize67eatodx=20
  15217. xsize8eatoax9b=21
  15218. xsize67adsbx=22
  15219. xsize67ixtoea=23
  15220. xsize67i9btoea=24
  15221. xsize67x9btodx02=25
  15222. xitrap=26
  15223. xsrcdx02=27
  15224. ximusp=28
  15225. ximove=29
  15226. ximoveq=30
  15227. xicmpm=31
  15228. xxbcd=32
  15229. xsize6movep=33
  15230. ximovem=34
  15231. xdx9btodx02=35
  15232. xax9btoax02=36
  15233. xdx9btoax02=37
  15234. xiunlk=38
  15235. xilink=39
  15236. ximovec=40
  15237. xccrtoea=41
  15238. xmoves=42
  15239. xbfield=43
  15240. xbfieldtodx=44
  15241. xdxtobfield=45
  15242. xbkpt=46
  15243. xlongbxx=47
  15244. xlongcc=48
  15245. xcallm=49
  15246. xcas=50
  15247. xcas2=51
  15248. xchk2=52
  15249. xcmp2=53
  15250. xrx03=54
  15251. xccode=55
  15252. xccodesize=56
  15253. xilinklg=57
  15254. xmulul=58
  15255. xmulsl=59
  15256. xdivull=60
  15257. xdivsll=61
  15258. xpack=62
  15259. xea2todx=63    ;chk.l
  15260. xfccode=64
  15261. xfccodesize=65
  15262. xfccodewordrel=66
  15263. xfccodeea=67
  15264. xfnop=68
  15265. xfmovecr=69
  15266. xpmove=70
  15267. xpmovefd=71
  15268. xpflusha=72
  15269. xpflush=73
  15270. xpload=74
  15271. xptest=75
  15272. xidbcac=76
  15273. xidbind=77
  15274. xmov16=78
  15275. xpccodeea=79
  15276. xpccodewordrel=80
  15277. xpccode=81
  15278. xpccodesize=82
  15279. xbrapcc=83
  15280. xbrafcc=84
  15281. xpflushs=85
  15282. xpflushr=86
  15283. xpvalid=87
  15284. xpflush40=88
  15285. xmov162=89
  15286. xlpstop=90
  15287. xtbl=91
  15288. xfpu=92
  15289. xfmovel=93
  15290. xfmoveml=94
  15291. xfmovemx=95
  15292.  
  15293.     even
  15294. disoffs:dc.w opfail,noops,dcwop,eatoccr,eatosr,srtoea,wordbxx,wordcc
  15295.     dc.w shortbxx,shortcc,eatoax,eatodx,dxtoea,iwordtoccr
  15296.     dc.w iwordtosr,iword,ccodewordrel,inibtoea,ccodeea,srcea
  15297.     dc.w size67eatodx,size8eatoax9b,size67adsbx,size67ixtoea
  15298.     dc.w size67i9btoea,size67x9btodx02,itrap,srcdx02,imusp
  15299.     dc.w imove,imoveq,icmpm,xbcd,size6movep
  15300.     dc.w imovem,dx9btodx02,ax9btoax02,dx9btoax02
  15301.     dc.w iunlk,ilink,imovec,ccrtoea,imoves,dbfield,dbfieldtodx
  15302.     dc.w ddxtobfield,dbkpt,longbxx,longcc,icallm,dcas,dcas2
  15303.     dc.w dchk2,dcmp2,drtm,dtpcc,dtpccsize,dlinklg,dmulul,dmulsl
  15304.     dc.w ddivull,ddivsll,dpack,ea2todx,dtpfcc,dtpfccsize
  15305.     dc.w dfccodewordrel,fccodeea,dfnop,dfmovecr,dpmove,dpmovefd
  15306.     dc.w dpflusha,dpflush,dpload,dptest,didbcac,didbind,dmov16
  15307.     dc.w dpccodeea,dpccodewordrel,dtppcc,dtppccsize,dbrapcc,dbrafcc
  15308.     dc.w dpflushs,dpflushr,dpvalid,dpflush40,dmov162,dlpstop
  15309.     dc.w dtbl,dfpu,dfmovel,dfmoveml,dfmovemx
  15310. assoffs:dc.w aopfail,anoops,adcwop,aeatoccr,aeatosr,asrtoea
  15311.     dc.w awordbxx,awordcc
  15312.     dc.w ashortbxx,ashortcc,aeatoax,aeatodx,adxtoea,aiwordtoccr
  15313.     dc.w aiwordtosr,aiword,accodewordrel,ainibtoea,accodeea,asrcea
  15314.     dc.w asize67eatodx,asize8eatoax9b,asize67adsbx,asize67ixtoea
  15315.     dc.w asize67i9btoea,asize67x9btodx02,aitrap,asrcdx02,aimusp
  15316.     dc.w aimove,aimoveq,aicmpm,axbcd,asize6movep
  15317.     dc.w aimovem,adx9btodx02,aax9btoax02,adx9btoax02
  15318.     dc.w aiunlk,ailink,aimovec,accrtoea,aimoves,abfield,abfieldtodx
  15319.     dc.w adxtobfield,abkpt,alongbxx,alongcc,aicallm,acas,acas2
  15320.     dc.w achk2,acmp2,artm,atpcc,atpccsize,alinklg,amulul,amulsl
  15321.     dc.w adivull,adivsll,apack,aea2todx,atpfcc,atpfccsize
  15322.     dc.w afccodewordrel,afccodeea,afnop,afmovecr,apmove,apmovefd
  15323.     dc.w apflusha,apflush,apload,aptest,aidbcac,aidbind,amov16
  15324.     dc.w apccodeea,apccodewordrel,atppcc,atppccsize,abrapcc,abrafcc
  15325.     dc.w apflushs,apflushr,apvalid,apflush40,amov162,alpstop
  15326.     dc.w atbl,afpu,afmovel,afmoveml,afmovemx
  15327.     ;     xyyyyyyy    0:fp0,1:fp0,fp0
  15328. fpuinst:dc.b %10110000,"sincos"!128    ;order!
  15329.     dc.b %00011000,"abs"!128,0,0,0
  15330.     dc.b %01011000,"sabs"!128,0,0
  15331.     dc.b %01011100,"dabs"!128,0,0
  15332.     dc.b %00011100,"acos"!128,0,0
  15333.     dc.b %10100010,"add"!128,0,0,0
  15334.     dc.b %11100010,"sadd"!128,0,0
  15335.     dc.b %11100110,"dadd"!128,0,0
  15336.     dc.b %00001100,"asin"!128,0,0
  15337.     dc.b %00001010,"atan"!128,0,0
  15338.     dc.b %00001101,"atanh"!128,0
  15339.     dc.b %10111000,"cmp"!128,0,0,0
  15340.     dc.b %00011101,"cos"!128,0,0,0
  15341.     dc.b %00011001,"cosh"!128,0,0
  15342.     dc.b %10100000,"div"!128,0,0,0
  15343.     dc.b %11100000,"sdiv"!128,0,0
  15344.     dc.b %11100100,"ddiv"!128,0,0
  15345.     dc.b %00010000,"etox"!128,0,0
  15346.     dc.b %00011110,"getexp"!128
  15347.     dc.b %00011111,"getman"!128
  15348.     dc.b %00000001,"int"!128,0,0,0
  15349.     dc.b %00000011,"intrz"!128,0
  15350.     dc.b %00010101,"log10"!128,0
  15351.     dc.b %00010110,"log2"!128,0,0
  15352.     dc.b %00010100,"logn"!128,0,0
  15353.     dc.b %00000110,"lognp1"!128    
  15354.     dc.b %10100001,"mod"!128,0,0,0
  15355. movetxt:dc.b %10000000,"move"!128,0,0
  15356.     dc.b %11000000,"smove"!128,0
  15357.     dc.b %11000100,"dmove"!128,0
  15358.     dc.b %10100011,"mul"!128,0,0,0
  15359.     dc.b %11100011,"smul"!128,0,0
  15360.     dc.b %11100111,"dmul"!128,0,0
  15361.     dc.b %00011010,"neg"!128,0,0,0
  15362.     dc.b %01011010,"sneg"!128,0,0
  15363.     dc.b %01011110,"dneg"!128,0,0
  15364.     dc.b %10100101,"rem"!128,0,0,0
  15365.     dc.b %10100110,"scale"!128,0
  15366.     dc.b %10100100,"sgldiv"!128
  15367.     dc.b %10100111,"sglmul"!128
  15368.     dc.b %00001110,"sin"!128,0,0,0
  15369.     dc.b %00000010,"sinh"!128,0,0
  15370.     dc.b %00000100,"sqrt"!128,0,0
  15371.     dc.b %01000001,"ssqrt"!128,0
  15372.     dc.b %01000101,"dsqrt"!128,0
  15373.     dc.b %10101000,"sub"!128,0,0,0
  15374.     dc.b %11101000,"ssub"!128,0,0
  15375.     dc.b %11101100,"dsub"!128,0,0
  15376.     dc.b %00001111,"tan"!128,0,0,0
  15377.     dc.b %00001001,"tanh"!128,0,0
  15378.     dc.b %00010010,"tentox"!128
  15379.     dc.b %00111010,"tst"!128,0,0,0
  15380.     dc.b %00010001,"twotox"!128
  15381.     dc.b 0    
  15382.     even    
  15383. instr:    dc.w $ffff,$4afc,snop!xnoops
  15384.     dc.b "illegal"!128,0
  15385.     dc.w $ffff,$4e70,snop!xnoops
  15386.     dc.b "reset"!128,0,0,0
  15387.     dc.w $ffff,$4e71,snop!xnoops
  15388.     dc.b "nop"!128,0,0,0,0,0
  15389.     dc.w $ffff,$4e73,snop!xnoops
  15390.     dc.b "rte"!128,0,0,0,0,0
  15391.     dc.w $ffff,$4e75,snop!xnoops
  15392.     dc.b "rts"!128,0,0,0,0,0
  15393.     dc.w $ffff,$4e77,snop!xnoops
  15394.     dc.b "rtr"!128,0,0,0,0,0
  15395.     dc.w $ffff,$4afa,snop!xnoops        ;cpu32 only
  15396.     dc.b "bgnd"!128,0,0,0,0
  15397.  
  15398.     dc.w $ffc0,$f200,snop!xfpu        ;68881
  15399.     dc.b "f"!128,0,0,0,0,0,0,0
  15400.     dc.w $ffc0,$f200,stab!xfmovel        ;68881
  15401.     dc.b "fmove.l"!128,0
  15402.     dc.w $ffc0,$f200,stab!xfmoveml        ;68881
  15403.     dc.b "fmovem.l"!128
  15404.     dc.w $ffc0,$f200,stab!xfmovemx        ;68881
  15405.     dc.b "fmovem.x"!128
  15406.     dc.w $ffff,$f200,stab!xfmovecr        ;68881
  15407.     dc.b "fmovecr"!128,0
  15408.     dc.w $ffff,$f280,snop!xfnop        ;68881
  15409.     dc.b "fnop"!128,0,0,0,0
  15410.     dc.w $ffff,$f510,snop!xnoops        ;68040 only!
  15411.     dc.b "pflushan"!128
  15412.     dc.w $ffff,$f518,snop!xnoops        ;68040 only!
  15413.     dc.b "pflusha!"!128
  15414.     dc.w $ffff,$f000,snop!xpflusha        ;68020 order!
  15415.     dc.b "pflusha"!128,0
  15416.     dc.w $ffff,$f000,stab!xpflushs        ;68851 only order!
  15417.     dc.b "pflushs"!128,0
  15418.     dc.w $ffc0,$f000,stab!xpflushr        ;68851 only order!
  15419.     dc.b "pflushr"!128,0
  15420.     dc.w $fff8,$f500,stab!xpflush40        ;68040 only!
  15421.     dc.b "pflushn"!128,0
  15422.     dc.w $fff8,$f508,stab!xpflush40        ;68040 only!
  15423.     dc.b "pflush"!128,0,0
  15424.     dc.w $fff8,$f548,stab!xpflush40        ;68040 only!
  15425.     dc.b "ptestw"!128,0,0
  15426.     dc.w $fff8,$f568,stab!xpflush40        ;68040 only!
  15427.     dc.b "ptestr"!128,0,0
  15428.  
  15429.     dc.w $ffff,$f000,stab!xpflush        ;68020 order!
  15430.     dc.b "pflush"!128,0,0
  15431.     dc.w $ffc0,$f000,stab!xpvalid        ;68851 only
  15432.     dc.b "pvalid"!128,0,0
  15433.         
  15434.     dc.w $ffff,$003c,stab!xiwordtoccr
  15435.     dc.b "ori"!128,0,0,0,0,0
  15436.     dc.w $ffff,$023c,stab!xiwordtoccr
  15437.     dc.b "andi"!128,0,0,0,0
  15438.     dc.w $ffff,$0a3c,stab!xiwordtoccr
  15439.     dc.b "eori"!128,0,0,0,0
  15440.  
  15441.     dc.w $ffff,$007c,stab!xiwordtosr
  15442.     dc.b "ori"!128,0,0,0,0,0
  15443.     dc.w $ffff,$027c,stab!xiwordtosr
  15444.     dc.b "andi"!128,0,0,0,0
  15445.     dc.w $ffff,$0a7c,stab!xiwordtosr
  15446.     dc.b "eori"!128,0,0,0,0
  15447.  
  15448.     dc.w $f1f8,$c140,stab!xdx9btodx02
  15449.     dc.b "exg"!128,0,0,0,0,0
  15450.     dc.w $f1f8,$c148,stab!xax9btoax02
  15451.     dc.b "exg"!128,0,0,0,0,0
  15452.     dc.w $f1f8,$c188,stab!xdx9btoax02
  15453.     dc.b "exg"!128,0,0,0,0,0
  15454.  
  15455.     dc.w $fff8,$4e58,stab!xiunlk
  15456.     dc.b "unlk"!128,0,0,0,0
  15457.     dc.w $fff8,$4808,stab!xilinklg        ;68020
  15458.     dc.b "link.l"!128,0,0
  15459.     dc.w $fff8,$4e50,stab!xilink
  15460.     dc.b "link"!128,0,0,0,0
  15461.  
  15462.     dc.w $fff8,$4848,stab!xbkpt        ;68020
  15463.     dc.b "bkpt"!128,0,0,0,0
  15464.  
  15465.     dc.w $f1f0,$8140,stab!xpack        ;68020
  15466.     dc.b "pack"!128,0,0,0,0
  15467.     dc.w $f1f0,$8180,stab!xpack        ;68020
  15468.     dc.b "unpk"!128,0,0,0,0
  15469.  
  15470.     dc.w $fff0,$4e40,stab!xitrap
  15471.     dc.b "trap"!128,0,0,0,0
  15472.  
  15473.     dc.w $f100,$7000,stab!ximoveq
  15474.     dc.b "moveq"!128,0,0,0
  15475.  
  15476.     dc.w $ffff,$f800,stab!xlpstop        ;cpu32 only
  15477.     dc.b "lpstop"!128,0,0    
  15478.     dc.w $ffff,$4e72,stab!xiword
  15479.     dc.b "stop"!128,0,0,0,0
  15480.     dc.w $ffff,$4e74,stab!xiword        ;68010
  15481.     dc.b "rtd"!128,0,0,0,0,0
  15482.  
  15483.     dc.w $fdff,$0cfc,snop!xcas2        ;68020
  15484.     dc.b "cas2."!128,0,0,0
  15485.  
  15486.     dc.w $fff8,$4840,stab!xsrcdx02
  15487.     dc.b "swap"!128,0,0,0,0
  15488.     dc.w $fff8,$49c0,stab!xsrcdx02        ;68020
  15489.     dc.b "extb"!128,0,0,0,0
  15490.     dc.w $ffb8,$4880,s6!xsrcdx02
  15491.     dc.b "ext"!128,0,0,0,0,0
  15492.  
  15493.     dc.w $fff0,$06c0,stab!xrx03        ;68020
  15494.     dc.b "rtm"!128,0,0,0,0,0
  15495. ;????
  15496.     dc.w $fffe,$f07a,snop!xpccodesize    ;68851 only order!
  15497.     dc.b "ptrap"!128,0,0,0
  15498.     dc.w $ffff,$f07c,snop!xpccode        ;68851 only order!
  15499.     dc.b "ptrap"!128,0,0,0
  15500.     dc.w $fffe,$f27a,snop!xfccodesize    ;68881 order!
  15501.     dc.b "ftrap"!128,0,0,0
  15502.     dc.w $ffff,$f27c,snop!xfccode        ;68881 order!
  15503.     dc.b "ftrap"!128,0,0,0
  15504.     dc.w $f0fe,$50fa,snop!xccodesize    ;68020 order!
  15505.     dc.b "trap"!128,0,0,0,0
  15506.     dc.w $f0ff,$50fc,snop!xccode        ;68020 order!
  15507.     dc.b "trap"!128,0,0,0,0
  15508.     dc.w $ffff,$4e76,snop!xnoops        ;order!
  15509.     dc.b "trapv"!128,0,0,0
  15510. ;????
  15511.     dc.w $ff3f,$f418,stab!xidbcac        ;68040
  15512.     dc.b "cinva"!128,0,0,0
  15513.     dc.w $ff38,$f408,stab!xidbind        ;68040
  15514.     dc.b "cinvl"!128,0,0,0
  15515.     dc.w $ff38,$f410,stab!xidbind        ;68040
  15516.     dc.b "cinvp"!128,0,0,0
  15517.     dc.w $ff3f,$f438,stab!xidbcac        ;68040
  15518.     dc.b "cpusha"!128,0,0
  15519.     dc.w $ff38,$f428,stab!xidbind        ;68040
  15520.     dc.b "cpushl"!128,0,0
  15521.     dc.w $ff38,$f430,stab!xidbind        ;68040
  15522.     dc.b "cpushp"!128,0,0
  15523.     dc.w $fff8,$f620,stab!xmov16        ;68040 order!
  15524.     dc.b "move16"!128,0,0
  15525.     dc.w $ffe0,$f600,stab!xmov162        ;68040
  15526.     dc.b "move16"!128,0,0
  15527.  
  15528.     dc.w $f138,$b108,s67!xicmpm
  15529.     dc.b "cmpm"!128,0,0,0,0
  15530.  
  15531.     dc.w $f1f0,$c100,stab!xxbcd
  15532.     dc.b "abcd"!128,0,0,0,0
  15533.     dc.w $f1f0,$8100,stab!xxbcd
  15534.     dc.b "sbcd"!128,0,0,0,0
  15535.  
  15536.     dc.w $f130,$d100,s67!xsize67adsbx
  15537.     dc.b "addx"!128,0,0,0,0
  15538.     dc.w $f130,$9100,s67!xsize67adsbx
  15539.     dc.b "subx"!128,0,0,0,0
  15540.  
  15541.     dc.w $ffc0,$f000,stab!xpmovefd        ;68030 only
  15542.     dc.b "pmovefd"!128,0
  15543.     dc.w $ffc0,$f000,stab!xpmove        ;68020
  15544.     dc.b "pmove"!128,0,0,0
  15545.     dc.w $ffc0,$f000,snop!xpload        ;68020
  15546.     dc.b "pload"!128,0,0,0
  15547.     dc.w $ffc0,$f000,snop!xptest        ;68020
  15548.     dc.b "ptest"!128,0,0,0
  15549.  
  15550.     dc.w $ffc0,$e8c0,stab!xbfield        ;68020
  15551.     dc.b "bftst"!128,0,0,0
  15552.     dc.w $ffc0,$eac0,stab!xbfield        ;68020
  15553.     dc.b "bfchg"!128,0,0,0
  15554.     dc.w $ffc0,$ecc0,stab!xbfield        ;68020
  15555.     dc.b "bfclr"!128,0,0,0
  15556.     dc.w $ffc0,$eec0,stab!xbfield        ;68020
  15557.     dc.b "bfset"!128,0,0,0
  15558.     dc.w $ffc0,$e9c0,stab!xbfieldtodx    ;68020
  15559.     dc.b "bfextu"!128,0,0
  15560.     dc.w $ffc0,$ebc0,stab!xbfieldtodx    ;68020
  15561.     dc.b "bfexts"!128,0,0
  15562.     dc.w $ffc0,$edc0,stab!xbfieldtodx    ;68020
  15563.     dc.b "bfffo"!128,0,0,0
  15564.     dc.w $ffc0,$efc0,stab!xdxtobfield    ;68020
  15565.     dc.b "bfins"!128,0,0,0
  15566.  
  15567.     dc.w $ffc0,$06c0,stab!xcallm        ;68020
  15568.     dc.b "callm"!128,0,0,0
  15569.     
  15570.     dc.w $ffc0,$40c0,stab!xsrtoea
  15571.     dc.b "move"!128,0,0,0,0
  15572.     dc.w $ffc0,$42c0,stab!xccrtoea        ;68010
  15573.     dc.b "move"!128,0,0,0,0
  15574.     dc.w $ffc0,$44c0,stab!xeatoccr
  15575.     dc.b "move"!128,0,0,0,0
  15576.     dc.w $ffc0,$46c0,stab!xeatosr
  15577.     dc.b "move"!128,0,0,0,0
  15578.  
  15579.     dc.w $fff0,$4e60,stab!ximusp
  15580.     dc.b "move"!128,0,0,0,0
  15581.  
  15582.     dc.w $fffe,$4e7a,stab!ximovec        ;68010
  15583.     dc.b "movec"!128,0,0,0
  15584.  
  15585.     dc.w $fb80,$4880,s6!ximovem
  15586.     dc.b "movem"!128,0,0,0
  15587.  
  15588.     dc.w $f138,$0108,s6!xsize6movep
  15589.     dc.b "movep"!128,0,0,0
  15590.  
  15591.     dc.w $ffc0,$f800,snop!xtbl        ;cpu32 only
  15592.     dc.b "tbl"!128,0,0,0,0,0
  15593.  
  15594.     dc.w $f1c0,$41c0,stab!xeatoax
  15595.     dc.b "lea"!128,0,0,0,0,0
  15596.  
  15597.     dc.w $ffff,$60ff,stab!xlongbxx        ;68020
  15598.     dc.b "bra.l"!128,0,0,0
  15599.     dc.w $ffff,$61ff,stab!xlongbxx        ;68020
  15600.     dc.b "bsr.l"!128,0,0,0
  15601.     dc.w $ffff,$6000,stab!xwordbxx
  15602.     dc.b "bra.w"!128,0,0,0
  15603.     dc.w $ffff,$6100,stab!xwordbxx
  15604.     dc.b "bsr.w"!128,0,0,0
  15605.     dc.w $ff00,$6000,stab!xshortbxx        ;order !
  15606.     dc.b "bra.b"!128,0,0,0
  15607.     dc.w $ff00,$6000,stab!xshortbxx        ;order !
  15608.     dc.b "bra.s"!128,0,0,0            ;clone
  15609.     dc.w $ff00,$6100,stab!xshortbxx
  15610.     dc.b "bsr.b"!128,0,0,0
  15611.     dc.w $ff00,$6100,stab!xshortbxx
  15612.     dc.b "bsr.s"!128,0,0,0            ;clone
  15613.     dc.w $ffb0,$f080,snop!xbrapcc        ;68851 only
  15614.     dc.b "pb"!128,0,0,0,0,0,0
  15615.     dc.w $ffa0,$f280,snop!xbrafcc        ;68881
  15616.     dc.b "fb"!128,0,0,0,0,0,0
  15617.     dc.w $f0ff,$60ff,snop!xlongcc        ;68020
  15618.     dc.b "b"!128,0,0,0,0,0,0,0
  15619.     dc.w $f0ff,$6000,snop!xwordcc
  15620.     dc.b "b"!128,0,0,0,0,0,0,0
  15621.     dc.w $f000,$6000,snop!xshortcc
  15622.     dc.b "b"!128,0,0,0,0,0,0,0
  15623.  
  15624.     dc.w $fff8,$f048,snop!xpccodewordrel    ;68851 only
  15625.     dc.b "pdb"!128,0,0,0,0,0
  15626.     dc.w $ffc0,$f040,snop!xpccodeea        ;68851 only
  15627.     dc.b "ps"!128,0,0,0,0,0,0
  15628.     dc.w $fff8,$f248,snop!xfccodewordrel    ;68881
  15629.     dc.b "fdb"!128,0,0,0,0,0
  15630.     dc.w $ffc0,$f240,snop!xfccodeea        ;68881
  15631.     dc.b "fs"!128,0,0,0,0,0,0
  15632.  
  15633.     dc.w $f0f8,$50c8,snop!xccodewordrel    ;order !
  15634.     dc.b "db"!128,0,0,0,0,0,0
  15635.     dc.w $f0c0,$50c0,snop!xccodeea
  15636.     dc.b "s"!128,0,0,0,0,0,0,0
  15637.  
  15638.     dc.w $ffc0,$4800,stab!xsrcea
  15639.     dc.b "nbcd"!128,0,0,0,0
  15640.     dc.w $ffc0,$4840,stab!xsrcea
  15641.     dc.b "pea"!128,0,0,0,0,0
  15642.     dc.w $ffc0,$4ac0,stab!xsrcea
  15643.     dc.b "tas"!128,0,0,0,0,0
  15644.     dc.w $ffc0,$4e80,stab!xsrcea
  15645.     dc.b "jsr"!128,0,0,0,0,0
  15646.     dc.w $ffc0,$4ec0,stab!xsrcea
  15647.     dc.b "jmp"!128,0,0,0,0,0
  15648.     dc.w $ffc0,$e0c0,stab!xsrcea
  15649.     dc.b "asr"!128,0,0,0,0,0
  15650.     dc.w $ffc0,$e1c0,stab!xsrcea
  15651.     dc.b "asl"!128,0,0,0,0,0
  15652.     dc.w $ffc0,$e2c0,stab!xsrcea
  15653.     dc.b "lsr"!128,0,0,0,0,0
  15654.     dc.w $ffc0,$e3c0,stab!xsrcea
  15655.     dc.b "lsl"!128,0,0,0,0,0
  15656.     dc.w $ffc0,$e4c0,stab!xsrcea
  15657.     dc.b "roxr"!128,0,0,0,0
  15658.     dc.w $ffc0,$e5c0,stab!xsrcea
  15659.     dc.b "roxl"!128,0,0,0,0
  15660.     dc.w $ffc0,$e6c0,stab!xsrcea
  15661.     dc.b "ror"!128,0,0,0,0,0
  15662.     dc.w $ffc0,$e7c0,stab!xsrcea
  15663.     dc.b "rol"!128,0,0,0,0,0
  15664.     dc.w $ffc0,$f100,stab!xsrcea        ;68851 only
  15665.     dc.b "psave"!128,0,0,0
  15666.     dc.w $ffc0,$f140,stab!xsrcea        ;68851 only
  15667.     dc.b "prestore"!128
  15668.     dc.w $ffc0,$f300,stab!xsrcea        ;68881
  15669.     dc.b "fsave"!128,0,0,0
  15670.     dc.w $ffc0,$f340,stab!xsrcea        ;68881
  15671.     dc.b "frestore"!128
  15672.  
  15673.     dc.w $ffc0,$4c40,stab!xdivull        ;68020
  15674.     dc.b "divul.l"!128,0
  15675.     dc.w $ffc0,$4c40,stab!xdivsll        ;68020
  15676.     dc.b "divsl.l"!128,0
  15677.     dc.w $ffc0,$4c40,stab!xmulul        ;68020
  15678.     dc.b "divu.l"!128,0,0
  15679.     dc.w $ffc0,$4c40,stab!xmulsl        ;68020
  15680.     dc.b "divs.l"!128,0,0
  15681.     dc.w $ffc0,$4c00,stab!xmulul        ;68020
  15682.     dc.b "mulu.l"!128,0,0
  15683.     dc.w $ffc0,$4c00,stab!xmulsl        ;68020
  15684.     dc.b "muls.l"!128,0,0
  15685.  
  15686.     dc.w $f1c0,$80c0,stab!xeatodx
  15687.     dc.b "divu"!128,0,0,0,0
  15688.     dc.w $f1c0,$81c0,stab!xeatodx
  15689.     dc.b "divs"!128,0,0,0,0
  15690.     dc.w $f1c0,$c0c0,stab!xeatodx
  15691.     dc.b "mulu"!128,0,0,0,0
  15692.     dc.w $f1c0,$c1c0,stab!xeatodx
  15693.     dc.b "muls"!128,0,0,0,0
  15694.     dc.w $f1c0,$4180,stab!xeatodx
  15695.     dc.b "chk.w"!128,0,0,0
  15696.     dc.w $f1c0,$4100,stab!xea2todx        ;68020
  15697.     dc.b "chk.l"!128,0,0,0
  15698.  
  15699.     dc.w $f0c0,$90c0,s8!xsize8eatoax9b
  15700.     dc.b "suba"!128,0,0,0,0
  15701.     dc.w $f0c0,$b0c0,s8!xsize8eatoax9b
  15702.     dc.b "cmpa"!128,0,0,0,0
  15703.     dc.w $f0c0,$d0c0,s8!xsize8eatoax9b
  15704.     dc.b "adda"!128,0,0,0,0
  15705.  
  15706.     dc.w $f100,$8000,s67!xsize67eatodx
  15707.     dc.b "or"!128,0,0,0,0,0,0
  15708.     dc.w $f100,$9000,s67!xsize67eatodx
  15709.     dc.b "sub"!128,0,0,0,0,0
  15710.     dc.w $f100,$b000,s67!xsize67eatodx
  15711.     dc.b "cmp"!128,0,0,0,0,0
  15712.     dc.w $f100,$c000,s67!xsize67eatodx
  15713.     dc.b "and"!128,0,0,0,0,0
  15714.     dc.w $f100,$d000,s67!xsize67eatodx
  15715.     dc.b "add"!128,0,0,0,0,0
  15716.  
  15717.     dc.w $f100,$8100,s67!xdxtoea
  15718.     dc.b "or"!128,0,0,0,0,0,0
  15719.     dc.w $f100,$9100,s67!xdxtoea
  15720.     dc.b "sub"!128,0,0,0,0,0
  15721.     dc.w $f100,$b100,s67!xdxtoea
  15722.     dc.b "eor"!128,0,0,0,0,0
  15723.     dc.w $f100,$c100,s67!xdxtoea
  15724.     dc.b "and"!128,0,0,0,0,0
  15725.     dc.w $f100,$d100,s67!xdxtoea
  15726.     dc.b "add"!128,0,0,0,0,0
  15727.  
  15728.     dc.w $ffc0,$0800,stab!xinibtoea
  15729.     dc.b "btst"!128,0,0,0,0
  15730.     dc.w $ffc0,$0840,stab!xinibtoea
  15731.     dc.b "bchg"!128,0,0,0,0
  15732.     dc.w $ffc0,$0880,stab!xinibtoea
  15733.     dc.b "bclr"!128,0,0,0,0
  15734.     dc.w $ffc0,$08c0,stab!xinibtoea
  15735.     dc.b "bset"!128,0,0,0,0
  15736.  
  15737.     dc.w $f9c0,$08c0,s9a_!xcas        ;68020
  15738.     dc.b "cas"!128,0,0,0,0,0
  15739.     dc.w $f9c0,$00c0,s9a!xchk2        ;68020
  15740.     dc.b "chk2"!128,0,0,0,0
  15741.     dc.w $f9c0,$00c0,s9a!xcmp2        ;68020
  15742.     dc.b "cmp2"!128,0,0,0,0
  15743.  
  15744.     dc.w $f100,$5000,s67!xsize67i9btoea
  15745.     dc.b "addq"!128,0,0,0,0
  15746.     dc.w $f100,$5100,s67!xsize67i9btoea
  15747.     dc.b "subq"!128,0,0,0,0
  15748.  
  15749.     dc.w $f118,$e000,s67!xsize67x9btodx02
  15750.     dc.b "asr"!128,0,0,0,0,0
  15751.     dc.w $f118,$e008,s67!xsize67x9btodx02
  15752.     dc.b "lsr"!128,0,0,0,0,0
  15753.     dc.w $f118,$e010,s67!xsize67x9btodx02
  15754.     dc.b "roxr"!128,0,0,0,0
  15755.     dc.w $f118,$e018,s67!xsize67x9btodx02
  15756.     dc.b "ror"!128,0,0,0,0,0
  15757.     dc.w $f118,$e100,s67!xsize67x9btodx02
  15758.     dc.b "asl"!128,0,0,0,0,0
  15759.     dc.w $f118,$e108,s67!xsize67x9btodx02
  15760.     dc.b "lsl"!128,0,0,0,0,0
  15761.     dc.w $f118,$e110,s67!xsize67x9btodx02
  15762.     dc.b "roxl"!128,0,0,0,0
  15763.     dc.w $f118,$e118,s67!xsize67x9btodx02
  15764.     dc.b "rol"!128,0,0,0,0,0
  15765.  
  15766.     dc.w $ff00,$0000,s67!xsize67ixtoea
  15767.     dc.b "ori"!128,0,0,0,0,0
  15768.     dc.w $ff00,$0200,s67!xsize67ixtoea
  15769.     dc.b "andi"!128,0,0,0,0
  15770.     dc.w $ff00,$0400,s67!xsize67ixtoea
  15771.     dc.b "subi"!128,0,0,0,0
  15772.     dc.w $ff00,$0600,s67!xsize67ixtoea
  15773.     dc.b "addi"!128,0,0,0,0
  15774.     dc.w $ff00,$0a00,s67!xsize67ixtoea
  15775.     dc.b "eori"!128,0,0,0,0
  15776.     dc.w $ff00,$0c00,s67!xsize67ixtoea
  15777.     dc.b "cmpi"!128,0,0,0,0
  15778.  
  15779.     dc.w $f1c0,$0100,stab!xdxtoea
  15780.     dc.b "btst"!128,0,0,0,0
  15781.     dc.w $f1c0,$0140,stab!xdxtoea
  15782.     dc.b "bchg"!128,0,0,0,0
  15783.     dc.w $f1c0,$0180,stab!xdxtoea
  15784.     dc.b "bclr"!128,0,0,0,0
  15785.     dc.w $f1c0,$01c0,stab!xdxtoea
  15786.     dc.b "bset"!128,0,0,0,0
  15787.  
  15788.     dc.w $ff00,$0e00,s67!xmoves        ;68010
  15789.     dc.b "moves"!128,0,0,0
  15790.  
  15791.     dc.w $ff00,$4000,s67!xsrcea
  15792.     dc.b "negx"!128,0,0,0,0
  15793.     dc.w $ff00,$4200,s67!xsrcea
  15794.     dc.b "clr"!128,0,0,0,0,0
  15795.     dc.w $ff00,$4400,s67!xsrcea
  15796.     dc.b "neg"!128,0,0,0,0,0
  15797.     dc.w $ff00,$4600,s67!xsrcea
  15798.     dc.b "not"!128,0,0,0,0,0
  15799.     dc.w $ff00,$4a00,s67!xsrcea
  15800.     dc.b "tst"!128,0,0,0,0,0
  15801.  
  15802.     dc.w $c000,$0000,snop!ximove
  15803.     dc.b "move."!128,0,0,0
  15804.  
  15805.     dc.w $f000,$a000,stab!xdcwop
  15806.     dc.b "line-a"!128,0,0
  15807.     dc.w $f000,$f000,stab!xdcwop
  15808.     dc.b "line-f"!128,0,0
  15809.     dc.w $0000,$0000,stab!xdcwop
  15810.     dc.b "dc.w"!128,0,0,0,0
  15811.  
  15812. tab6502:dc.b brk65,1    ;2 byte instruction
  15813.     dc.b ora65,5
  15814.     dc.b cop65,1
  15815.     dc.b ora65,17
  15816.     dc.b tsb65,3
  15817.     dc.b ora65,3
  15818.     dc.b asl65,3
  15819.     dc.b ora65,14
  15820.     dc.b php65,0
  15821.     dc.b ora65,23
  15822.     dc.b asl65,4
  15823.     dc.b phd65,0
  15824.     dc.b tsb65,2
  15825.     dc.b ora65,2
  15826.     dc.b asl65,2
  15827.     dc.b ora65,19
  15828.     dc.b bpl65,12
  15829.     dc.b ora65,6
  15830.     dc.b ora65,16
  15831.     dc.b ora65,18
  15832.     dc.b trb65,3
  15833.     dc.b ora65,7
  15834.     dc.b asl65,7
  15835.     dc.b ora65,15
  15836.     dc.b clc65,0
  15837.     dc.b ora65,9
  15838.     dc.b inc65,4
  15839.     dc.b tcs65,0
  15840.     dc.b trb65,2
  15841.     dc.b ora65,8
  15842.     dc.b asl65,8
  15843.     dc.b ora65,20
  15844.     dc.b jsr65,2
  15845.     dc.b and65,5
  15846.     dc.b jsl65,19
  15847.     dc.b and65,17
  15848.     dc.b bit65,3
  15849.     dc.b and65,3
  15850.     dc.b rol65,3
  15851.     dc.b and65,14
  15852.     dc.b plp65,0
  15853.     dc.b and65,23
  15854.     dc.b rol65,4
  15855.     dc.b pld65,0
  15856.     dc.b bit65,2
  15857.     dc.b and65,2
  15858.     dc.b rol65,2
  15859.     dc.b and65,19
  15860.     dc.b bmi65,12
  15861.     dc.b and65,6
  15862.     dc.b and65,16
  15863.     dc.b and65,18
  15864.     dc.b bit65,7
  15865.     dc.b and65,7
  15866.     dc.b rol65,7
  15867.     dc.b and65,15
  15868.     dc.b sec65,0
  15869.     dc.b and65,9
  15870.     dc.b dec65,4
  15871.     dc.b tsc65,0
  15872.     dc.b bit65,8
  15873.     dc.b and65,8
  15874.     dc.b rol65,8
  15875.     dc.b and65,20
  15876.     dc.b rti65,0
  15877.     dc.b eor65,5
  15878.     dc.b wdm65,1    ;was: dc.b(13)dummy, 1:immediate
  15879.     dc.b eor65,17
  15880.     dc.b mvp65,2
  15881.     dc.b eor65,3
  15882.     dc.b lsr65,3
  15883.     dc.b eor65,14
  15884.     dc.b pha65,0
  15885.     dc.b eor65,23
  15886.     dc.b lsr65,4
  15887.     dc.b phk65,0
  15888.     dc.b jmp65,2
  15889.     dc.b eor65,2
  15890.     dc.b lsr65,2
  15891.     dc.b eor65,19
  15892.     dc.b bvc65,12
  15893.     dc.b eor65,6
  15894.     dc.b eor65,16
  15895.     dc.b eor65,18
  15896.     dc.b mvn65,2
  15897.     dc.b eor65,7
  15898.     dc.b lsr65,7
  15899.     dc.b eor65,15
  15900.     dc.b cli65,0
  15901.     dc.b eor65,9
  15902.     dc.b phy65,0
  15903.     dc.b tcd65,0
  15904.     dc.b jmp65,19
  15905.     dc.b eor65,8
  15906.     dc.b lsr65,8
  15907.     dc.b eor65,20
  15908.     dc.b rts65,0
  15909.     dc.b adc65,5
  15910.     dc.b per65,21
  15911.     dc.b adc65,17
  15912.     dc.b stz65,3
  15913.     dc.b adc65,3
  15914.     dc.b ror65,3
  15915.     dc.b adc65,14
  15916.     dc.b pla65,0
  15917.     dc.b adc65,23
  15918.     dc.b ror65,4
  15919.     dc.b rtl65,0
  15920.     dc.b jmp65,11
  15921.     dc.b adc65,2
  15922.     dc.b ror65,2
  15923.     dc.b adc65,19
  15924.     dc.b bvs65,12
  15925.     dc.b adc65,6
  15926.     dc.b adc65,16
  15927.     dc.b adc65,18
  15928.     dc.b stz65,7
  15929.     dc.b adc65,7
  15930.     dc.b ror65,7
  15931.     dc.b adc65,15
  15932.     dc.b sei65,0
  15933.     dc.b adc65,9
  15934.     dc.b ply65,0
  15935.     dc.b tdc65,0
  15936.     dc.b jmp65,22
  15937.     dc.b adc65,8
  15938.     dc.b ror65,8
  15939.     dc.b adc65,20
  15940.     dc.b bra65,12
  15941.     dc.b sta65,5
  15942.     dc.b brl65,21
  15943.     dc.b sta65,17
  15944.     dc.b sty65,3
  15945.     dc.b sta65,3
  15946.     dc.b stx65,3
  15947.     dc.b sta65,14
  15948.     dc.b dey65,0
  15949.     dc.b bit65,23
  15950.     dc.b txa65,0
  15951.     dc.b phb65,0
  15952.     dc.b sty65,2
  15953.     dc.b sta65,2
  15954.     dc.b stx65,2
  15955.     dc.b sta65,19
  15956.     dc.b bcc65,12
  15957.     dc.b sta65,6
  15958.     dc.b sta65,16
  15959.     dc.b sta65,18
  15960.     dc.b sty65,7
  15961.     dc.b sta65,7
  15962.     dc.b stx65,10
  15963.     dc.b sta65,15
  15964.     dc.b tya65,0
  15965.     dc.b sta65,9
  15966.     dc.b txs65,0
  15967.     dc.b txy65,0
  15968.     dc.b stz65,2
  15969.     dc.b sta65,8
  15970.     dc.b stz65,8
  15971.     dc.b sta65,20
  15972.     dc.b ldy65,24
  15973.     dc.b lda65,5
  15974.     dc.b ldx65,24
  15975.     dc.b lda65,17
  15976.     dc.b ldy65,3
  15977.     dc.b lda65,3
  15978.     dc.b ldx65,3
  15979.     dc.b lda65,14
  15980.     dc.b tay65,0
  15981.     dc.b lda65,23
  15982.     dc.b tax65,0
  15983.     dc.b plb65,0
  15984.     dc.b ldy65,2
  15985.     dc.b lda65,2
  15986.     dc.b ldx65,2
  15987.     dc.b lda65,19
  15988.     dc.b bcs65,12
  15989.     dc.b lda65,6
  15990.     dc.b lda65,16
  15991.     dc.b lda65,18
  15992.     dc.b ldy65,7
  15993.     dc.b lda65,7
  15994.     dc.b ldx65,10
  15995.     dc.b lda65,15
  15996.     dc.b clv65,0
  15997.     dc.b lda65,9
  15998.     dc.b tsx65,0
  15999.     dc.b tyx65,0
  16000.     dc.b ldy65,8
  16001.     dc.b lda65,8
  16002.     dc.b ldx65,9
  16003.     dc.b lda65,20
  16004.     dc.b cpy65,24
  16005.     dc.b cmp65,5
  16006.     dc.b rep65,1
  16007.     dc.b cmp65,17
  16008.     dc.b cpy65,3
  16009.     dc.b cmp65,3
  16010.     dc.b dec65,3
  16011.     dc.b cmp65,14
  16012.     dc.b iny65,0
  16013.     dc.b cmp65,23
  16014.     dc.b dex65,0
  16015.     dc.b wai65,0
  16016.     dc.b cpy65,2
  16017.     dc.b cmp65,2
  16018.     dc.b dec65,2
  16019.     dc.b cmp65,19
  16020.     dc.b bne65,12
  16021.     dc.b cmp65,6
  16022.     dc.b cmp65,16
  16023.     dc.b cmp65,18
  16024.     dc.b pei65,16
  16025.     dc.b cmp65,7
  16026.     dc.b dec65,7
  16027.     dc.b cmp65,15
  16028.     dc.b cld65,0
  16029.     dc.b cmp65,9
  16030.     dc.b phx65,0
  16031.     dc.b stp65,0
  16032.     dc.b jml65,11
  16033.     dc.b cmp65,8
  16034.     dc.b dec65,8
  16035.     dc.b cmp65,20
  16036.     dc.b cpx65,24
  16037.     dc.b sbc65,5
  16038.     dc.b sep65,1
  16039.     dc.b sbc65,17
  16040.     dc.b cpx65,3
  16041.     dc.b sbc65,3
  16042.     dc.b inc65,3
  16043.     dc.b sbc65,14
  16044.     dc.b inx65,0
  16045.     dc.b sbc65,23
  16046.     dc.b nop65,0
  16047.     dc.b xba65,0
  16048.     dc.b cpx65,2
  16049.     dc.b sbc65,2
  16050.     dc.b inc65,2
  16051.     dc.b sbc65,19
  16052.     dc.b beq65,12
  16053.     dc.b sbc65,6
  16054.     dc.b sbc65,16
  16055.     dc.b sbc65,18
  16056.     dc.b pea65,2
  16057.     dc.b sbc65,7
  16058.     dc.b inc65,7
  16059.     dc.b sbc65,15
  16060.     dc.b sed65,0
  16061.     dc.b sbc65,9
  16062.     dc.b plx65,0
  16063.     dc.b xce65,0
  16064.     dc.b jsr65,22
  16065.     dc.b sbc65,8
  16066.     dc.b inc65,8
  16067.     dc.b sbc65,20
  16068.     dc.b -1
  16069. adc65=0
  16070. and65=1
  16071. asl65=2
  16072. bcc65=3
  16073. bcs65=4
  16074. beq65=5
  16075. bit65=6
  16076. bmi65=7
  16077. bne65=8
  16078. bpl65=9
  16079. brk65=10
  16080. bvc65=11
  16081. bvs65=12
  16082. clc65=13
  16083. cli65=14
  16084. cld65=15
  16085. clv65=16
  16086. cmp65=17
  16087. cpx65=18
  16088. cpy65=19
  16089. dec65=20
  16090. dex65=21
  16091. dey65=22
  16092. eor65=23
  16093. inc65=24
  16094. inx65=25
  16095. iny65=26
  16096. jmp65=27
  16097. jsr65=28
  16098. lsr65=29
  16099. lda65=30
  16100. ldx65=31
  16101. ldy65=32
  16102. nop65=33
  16103. ora65=34
  16104. pha65=35
  16105. php65=36
  16106. pla65=37
  16107. plp65=38
  16108. rol65=39
  16109. ror65=40
  16110. rti65=41
  16111. rts65=42
  16112. sbc65=43
  16113. sec65=44
  16114. sed65=45
  16115. sei65=46
  16116. sta65=47
  16117. stx65=48
  16118. sty65=49
  16119. tax65=50
  16120. tay65=51
  16121. tsx65=52
  16122. txa65=53
  16123. txs65=54
  16124. tya65=55
  16125. wdm65=56
  16126. xba65=57
  16127. wai65=58
  16128. stp65=59
  16129. rtl65=60
  16130. xce65=61
  16131. tyx65=62
  16132. txy65=63
  16133. tsc65=64
  16134. tdc65=65
  16135. tcs65=66
  16136. tcd65=67
  16137. ply65=68
  16138. plx65=69
  16139. pld65=70
  16140. plb65=71
  16141. phy65=72
  16142. phx65=73
  16143. phk65=74
  16144. phd65=75
  16145. phb65=76
  16146. sep65=77
  16147. rep65=78
  16148. jml65=79
  16149. cop65=80
  16150. bra65=81
  16151. tsb65=82
  16152. trb65=83
  16153. pea65=84
  16154. pei65=85
  16155. per65=86
  16156. brl65=87
  16157. jsl65=88
  16158. mvp65=89
  16159. mvn65=90
  16160. stz65=91
  16161. txt6502:dc.b "adc"
  16162.     dc.b "and"
  16163.     dc.b "asl"
  16164.     dc.b "bcc"
  16165.     dc.b "bcs"
  16166.     dc.b "beq"
  16167.     dc.b "bit"
  16168.     dc.b "bmi"
  16169.     dc.b "bne"
  16170.     dc.b "bpl"
  16171.     dc.b "brk"
  16172.     dc.b "bvc"
  16173.     dc.b "bvs"
  16174.     dc.b "clc"
  16175.     dc.b "cli"
  16176.     dc.b "cld"
  16177.     dc.b "clv"
  16178.     dc.b "cmp"
  16179.     dc.b "cpx"
  16180.     dc.b "cpy"
  16181.     dc.b "dec"
  16182.     dc.b "dex"
  16183.     dc.b "dey"
  16184.     dc.b "eor"
  16185.     dc.b "inc"
  16186.     dc.b "inx"
  16187.     dc.b "iny"
  16188.     dc.b "jmp"
  16189.     dc.b "jsr"
  16190.     dc.b "lsr"
  16191.     dc.b "lda"
  16192.     dc.b "ldx"
  16193.     dc.b "ldy"
  16194.     dc.b "nop"
  16195.     dc.b "ora"
  16196.     dc.b "pha"
  16197.     dc.b "php"
  16198.     dc.b "pla"
  16199.     dc.b "plp"
  16200.     dc.b "rol"
  16201.     dc.b "ror"
  16202.     dc.b "rti"
  16203.     dc.b "rts"
  16204.     dc.b "sbc"
  16205.     dc.b "sec"
  16206.     dc.b "sed"
  16207.     dc.b "sei"
  16208.     dc.b "sta"
  16209.     dc.b "stx"
  16210.     dc.b "sty"
  16211.     dc.b "tax"
  16212.     dc.b "tay"
  16213.     dc.b "tsx"
  16214.     dc.b "txa"
  16215.     dc.b "txs"
  16216.     dc.b "tya"
  16217.     dc.b "wdm"
  16218.     dc.b "xba"
  16219.     dc.b "wai"
  16220.     dc.b "stp"
  16221.     dc.b "rtl"
  16222.     dc.b "xce"
  16223.     dc.b "tyx"
  16224.     dc.b "txy"
  16225.     dc.b "tsc"
  16226.     dc.b "tdc"
  16227.     dc.b "tcs"
  16228.     dc.b "tcd"
  16229.     dc.b "ply"
  16230.     dc.b "plx"
  16231.     dc.b "pld"
  16232.     dc.b "plb"
  16233.     dc.b "phy"
  16234.     dc.b "phx"
  16235.     dc.b "phk"
  16236.     dc.b "phd"
  16237.     dc.b "phb"
  16238.     dc.b "sep"
  16239.     dc.b "rep"
  16240.     dc.b "jml"
  16241.     dc.b "cop"
  16242.     dc.b "bra"
  16243.     dc.b "tsb"
  16244.     dc.b "trb"
  16245.     dc.b "pea"
  16246.     dc.b "pei"
  16247.     dc.b "per"
  16248.     dc.b "brl"
  16249.     dc.b "jsl"
  16250.     dc.b "mvp"
  16251.     dc.b "mvn"
  16252.     dc.b "stz"
  16253.     dc.b -1
  16254.  
  16255. snesadr:dc.w $2100,$2143
  16256.     dc.w $2180,$2183
  16257.     dc.w $4016,$4017
  16258.     dc.w $4200,$421f
  16259.     dc.w $4300,$430a
  16260.     dc.w -1
  16261. snesreg:dc.b "scrnfade"        ;2100
  16262.     dc.b "oam_size"        ;2101
  16263.     dc.b "oam_addr"        ;2102
  16264.     dc.b "oam_adhi"        ;2103
  16265.     dc.b "oam_data"        ;2104
  16266.     dc.b "vscrnmod"        ;2105
  16267.     dc.b "mozaik  "        ;2106
  16268.     dc.b "playf0_a"        ;2107
  16269.     dc.b "playf1_a"        ;2108
  16270.     dc.b "playf2_a"        ;2109
  16271.     dc.b "playf3_a"        ;210a
  16272.     dc.b "tile01_a"        ;210b
  16273.     dc.b "tile23_a"        ;210c
  16274.     dc.b "scrollx0"        ;210d
  16275.     dc.b "scrolly0"        ;210e
  16276.     dc.b "scrollx1"        ;210f
  16277.     dc.b "scrolly1"        ;2110
  16278.     dc.b "scrollx2"        ;2111
  16279.     dc.b "scrolly2"        ;2112
  16280.     dc.b "scrollx3"        ;2113
  16281.     dc.b "scrolly3"        ;2114
  16282.     dc.b "vportcon"        ;2115
  16283.     dc.b "vportadr"        ;2116
  16284.     dc.b "vportadh"        ;2117
  16285.     dc.b "vportdat"        ;2118
  16286.     dc.b "vportdhi"        ;2119
  16287.     dc.b "mod7init"        ;211a
  16288.     dc.b "mod7rega"        ;211b
  16289.     dc.b "mod7regb"        ;211c
  16290.     dc.b "mod7regc"        ;211d
  16291.     dc.b "mod7regd"        ;211e
  16292.     dc.b "mod7regx"        ;211f
  16293.     dc.b "mod7regy"        ;2120
  16294.     dc.b "paletpnt"        ;2121
  16295.     dc.b "paletdat"        ;2122
  16296.     dc.b "wi12mask"        ;2123
  16297.     dc.b "wi34mask"        ;2124
  16298.     dc.b "wind_obj"        ;2125
  16299.     dc.b "wind0pos"        ;2126
  16300.     dc.b "wind1pos"        ;2127
  16301.     dc.b "wind2pos"        ;2128
  16302.     dc.b "wind3pos"        ;2129
  16303.     dc.b "wind1log"        ;212a
  16304.     dc.b "wind2log"        ;212b
  16305.     dc.b "playfflg"        ;212c
  16306.     dc.b "sscrnflg"        ;212d
  16307.     dc.b "winmaskm"        ;212e
  16308.     dc.b "winmasks"        ;212f
  16309.     dc.b "colsinit"        ;2130
  16310.     dc.b "colstval"        ;2131
  16311.     dc.b "colstdat"        ;2132
  16312.     dc.b "ilaceflg"        ;2133
  16313.     dc.b "result_l"        ;2134
  16314.     dc.b "result_m"        ;2135
  16315.     dc.b "result_h"        ;2136
  16316.     dc.b "hv_latch"        ;2137
  16317.     dc.b "oamrddat"        ;2138
  16318.     dc.b "vrrddatl"        ;2139
  16319.     dc.b "vrrddath"        ;213a
  16320.     dc.b "palrddat"        ;213b
  16321.     dc.b "ho_count"        ;213c
  16322.     dc.b "ve_count"        ;213d
  16323.     dc.b "ppusta77"        ;213e
  16324.     dc.b "ppusta78"        ;213f
  16325.     dc.b "audireg0"        ;2140
  16326.     dc.b "audireg1"        ;2141
  16327.     dc.b "audireg2"        ;2142
  16328.     dc.b "audireg3"        ;2143
  16329.  
  16330.     dc.b "wm_data "        ;2180
  16331.     dc.b "wmaddrlo"        ;2181
  16332.     dc.b "wmaddrme"        ;2182
  16333.     dc.b "wmdatahi"        ;2183
  16334.  
  16335.     dc.b "ctr13dat"        ;4016
  16336.     dc.b "ctr24dat"        ;4017
  16337.  
  16338.     dc.b "nmitmflg"        ;4200
  16339.     dc.b "ioprtout"        ;4201
  16340.     dc.b "multican"        ;4202
  16341.     dc.b "multiplr"        ;4203
  16342.     dc.b "dividlow"        ;4204
  16343.     dc.b "divid_hi"        ;4205
  16344.     dc.b "divisor "        ;4206
  16345.     dc.b "hcountlo"        ;4207
  16346.     dc.b "hcounthi"        ;4208
  16347.     dc.b "vcountlo"        ;4209
  16348.     dc.b "vcounthi"        ;420a
  16349.     dc.b "dmaonflg"        ;420b
  16350.     dc.b "hdmaonfl"        ;420c
  16351.     dc.b "memselec"        ;420d
  16352.     dc.b "reserved"        ;420e
  16353.     dc.b "reserved"        ;420f
  16354.     dc.b "nmivblfl"        ;4210
  16355.     dc.b "irg_flag"        ;4211
  16356.     dc.b "hvjoy_on"        ;4212
  16357.     dc.b "ioprtinp"        ;4213
  16358.     dc.b "divquolo"        ;4214
  16359.     dc.b "divquohi"        ;4215
  16360.     dc.b "multprlo"        ;4216
  16361.     dc.b "multprhi"        ;4217
  16362.     dc.b "pad_1_lo"        ;4218
  16363.     dc.b "pad_1_hi"        ;4219
  16364.     dc.b "pad_2_lo"        ;421a
  16365.     dc.b "pad_2_hi"        ;421b
  16366.     dc.b "pad_3_lo"        ;421c
  16367.     dc.b "pad_3_hi"        ;421e
  16368.     dc.b "pad_4_lo"        ;421e
  16369.     dc.b "pad_4_hi"        ;421f
  16370.  
  16371.     dc.b "dma",0,"parm"    ;4300...4370
  16372.     dc.b "dma",0,"dest"    ;4301
  16373.     dc.b "dma",0,"srcl"    ;4302
  16374.     dc.b "dma",0,"srcm"    ;4303
  16375.     dc.b "dma",0,"srch"    ;4304
  16376.     dc.b "dma",0,"sizl"    ;4305
  16377.     dc.b "dma",0,"sizh"    ;4306
  16378.     dc.b "dma",0,"hmmm"    ;4307
  16379.     dc.b "dma",0,"tabl"    ;4308
  16380.     dc.b "dma",0,"tabh"    ;4309
  16381.     dc.b "hdma",0,"lin"    ;430a
  16382.  
  16383.     even
  16384. font:    ;thanx for the font must go to the terminator/trsi (you rule)
  16385. dc.l $00000000,$00000000,$18181818,$18001800,$6c6c0000,$00000000 
  16386. dc.l $6666ff66,$ff666600,$183e603c,$067c1800,$c3c60c18,$3063c300 
  16387. dc.l $386c6876,$dccc7600,$18183000,$00000000,$0c183030,$30180c00 
  16388. dc.l $30180c0c,$0c183000,$00663cff,$3c660000,$0018187e,$18180000 
  16389. dc.l $00000000,$00181830,$0000007e,$00000000,$00000000,$00181800 
  16390. dc.l $03060c18,$3060c000,$3c666e7e,$76663c00,$18381818,$18181800 
  16391. dc.l $3c66060c,$18307e00,$7e060c1c,$06663c00,$1c3c6ccc,$fe0c0c00 
  16392. dc.l $7e607c06,$06663c00,$0c18307c,$66663c00,$7e06060c,$18181800 
  16393. dc.l $3c66663c,$66663c00,$3c66663e,$0c183000,$00181800,$00181800 
  16394. dc.l $00001818,$00181830,$0c183060,$30180c00,$00007e00,$007e0000 
  16395. dc.l $30180c06,$0c183000,$3c66060c,$18001800,$3e636f6f,$6f603e00 
  16396. dc.l $3c66667e,$66666600,$7c66667c,$66667c00,$3c666060,$60663c00 
  16397. dc.l $786c6666,$666c7800,$3e60607c,$60603e00,$3e60607c,$60606000 
  16398. dc.l $3c66606e,$66663e00,$6666667e,$66666600,$18181818,$18181800 
  16399. dc.l $06060606,$06663c00,$66666c78,$6c666600,$60606060,$60603e00 
  16400. dc.l $63777f6b,$63636300,$66767e6e,$66666600,$3c666666,$66663c00 
  16401. dc.l $7c66667c,$60606000,$3c666666,$666e3c06,$7c66667c,$786c6600 
  16402. dc.l $3c66603c,$06663c00,$7e181818,$18181800,$66666666,$66663c00 
  16403. dc.l $66666666,$6c787000,$6363636b,$7f776300,$6363361c,$36636300 
  16404. dc.l $6666663c,$18181800,$7e060c18,$30607e00,$3c303030,$30303c00 
  16405. dc.l $c0603018,$0c060300,$3c0c0c0c,$0c0c3c00,$10386cc6,$00000000 
  16406. dc.l $00000000,$0000fe00,$18180c00,$00000000,$00003c66,$7e666600 
  16407. dc.l $60607c66,$66667c00,$00003c66,$60663c00,$06063e66,$66663e00 
  16408. dc.l $00003e60,$7e603e00,$1c303c30,$30303000,$00003e66,$663e063c 
  16409. dc.l $60606666,$7e666600,$18001818,$18181800,$18001818,$18181870 
  16410. dc.l $6060666c,$786c6600,$30303030,$30301c00,$00006377,$7f6b6300 
  16411. dc.l $00006676,$7e6e6600,$00003c66,$66663c00,$00007c66,$667c6060 
  16412. dc.l $00003e66,$663e0606,$00007c66,$7c6c6600,$00003e60,$3c067c00 
  16413. dc.l $00007e18,$18181800,$00006666,$66663c00,$00006666,$6c787000 
  16414. dc.l $0000636b,$6b363600,$00006336,$1c366300,$00006666,$663e063c 
  16415. dc.l $00007e0c,$18307e00,$0e181870,$18180e00,$18181808,$18181800 
  16416. dc.l $7018180e,$18187000,$729c0000,$00000000,$cc33cc33,$cc33cc33 
  16417. dc.l $00000000,$00000000,$18001818,$18181800,$0c3e6c6c,$3e0c0000 
  16418. dc.l $1c363078,$30307e00,$423c663c,$42000000,$c3663c18,$3c183c00 
  16419. dc.l $18181800,$18181800,$3c403c66,$3c023c00,$66000000,$00000000 
  16420. dc.l $7e81bdb1,$bd817e00,$78d8d87c,$00fc0000,$003366cc,$66330000 
  16421. dc.l $7e060000,$00000000,$00007e7e,$00000000,$7e81bda5,$b9ad817e 
  16422. dc.l $7e000000,$00000000,$3c663c00,$00000000,$18187e18,$18007e00 
  16423. dc.l $f0183060,$f8000000,$f0183018,$f0000000,$18300000,$00000000 
  16424. dc.l $0000c6c6,$c6eefac0,$7ef4f474,$14141400,$00000018,$18000000 
  16425. dc.l $00000000,$00001830,$30703030,$30000000,$70888870,$00f80000 
  16426. dc.l $00cc6633,$66cc0000,$40c64c58,$3266cf02,$60e66c78,$3f6bc60f 
  16427. dc.l $c023662c,$d9336701,$18001830,$60663c00,$30083c66,$7e666600 
  16428. dc.l $0c103c66,$7e666600,$18243c66,$7e666600,$324c3c66,$7e666600 
  16429. dc.l $663c6666,$7e666600,$3c663c66,$7e666600,$7fccccff,$cccccf00 
  16430. dc.l $3c666060,$663c0830,$30083e60,$7c603e00,$0c103e60,$7c603e00 
  16431. dc.l $18243e60,$7c603e00,$66003e60,$7c603e00,$30081818,$18181800 
  16432. dc.l $0c101818,$18181800,$18241818,$18181800,$66001818,$18181800 
  16433. dc.l $786c66f6,$666c7800,$324c767e,$6e666600,$30083c66,$66663c00 
  16434. dc.l $0c103c66,$66663c00,$18243c66,$66663c00,$324c3c66,$66663c00 
  16435. dc.l $663c6666,$66663c00,$00006336,$1c366300,$3d666e7e,$7666bc00 
  16436. dc.l $30086666,$66663c00,$0c106666,$66663c00,$18246666,$66663c00 
  16437. dc.l $cc00cccc,$cccc7800,$06086666,$3c181800,$60607c66,$667c6060 
  16438. dc.l $7c66666c,$66666c60,$3008003c,$667e6600,$0c10003c,$667e6600 
  16439. dc.l $1824003c,$667e6600,$324c003c,$667e6600,$66003c66,$7e666600 
  16440. dc.l $3c663c3c,$667e6600,$00007fcc,$ffcccf00,$00003c66,$60663c10 
  16441. dc.l $18041e30,$3e301e00,$0c101e30,$3e301e00,$0c121e30,$3e301e00 
  16442. dc.l $36001e30,$3e301e00,$30080018,$18181800,$0c100018,$18181800 
  16443. dc.l $18240018,$18181800,$66000018,$18181800,$307c183c,$66663c00 
  16444. dc.l $324c0076,$7e6e6600,$3008003c,$66663c00,$0c10003c,$66663c00 
  16445. dc.l $1824003c,$66663c00,$324c003c,$66663c00,$66003c66,$66663c00 
  16446. dc.l $0018007e,$00180000,$00013e67,$6b733e40,$30080066,$66663c00 
  16447. dc.l $0c100066,$66663c00,$18240066,$66663c00,$00660066,$66663c00 
  16448. dc.l $0c100066,$663e063c,$30303c36,$363c3030,$66006666,$663e063c 
  16449. constend:dc.l chksum
  16450.  
  16451. ;;;;;;;;;;;;;;;;;
  16452. ; variable area ;
  16453. ;;;;;;;;;;;;;;;;;
  16454.  
  16455.     even    ; yo that's true
  16456. keytab:    dc.b "`1234567890ß'\",0,"0"    ;keycodes increase...
  16457.     dc.b "qwertzuiopü+",0,"123"    ;all this is patched...
  16458.     dc.b "asdfghjklöä#",0,"456"
  16459.     dc.b "<yxcvbnm,.-",0,".789"
  16460.     dc.b " ",8,5,13,13,$1b,9,0,0,0,"-",0,$10,$11,$13,$12
  16461.     dc.b $80,$81,$82,$83,$84,$85,$86,$87,$88,$89,"[]/*+",6
  16462.  
  16463.     dc.b "~!",34,"§$%&/()=?`|",0,12        ;$60...
  16464.     dc.b "QWERTZUIOPÜ*",0,$1a,$16,0
  16465.     dc.b "ASDFGHJKLÖÄ^",0,0,0,0
  16466.     dc.b ">YXCVBNM;:_",0,0,$19,$15,0
  16467.     dc.b " ",7,$14,0,14,0,10,0,0,0,"-",0,1,2,4,3
  16468.     dc.b 0,0,0,0,0,0,0,0,0,0,"{}/*+",11
  16469.     even
  16470. mousespr:
  16471.     dc.w $8080,$9200
  16472.     dc.l $00000000,$00000000,$00000000,$000001c0,$008001c0,$00800140 
  16473.     dc.l $00800140,$00800140,$00800140,$00800140,$00800140,$00800770 
  16474.     dc.l $03e00410,$00800770,$00800140,$000001c0,$00000000,$00000000 
  16475.  
  16476. scradr:    dc.l 0
  16477. dskadr:    dc.l 0
  16478. spradr:    dc.l 0
  16479. copadr:    dc.l 0
  16480.  
  16481.     ;mod
  16482. regs:    blk.l 16+6+1+1,0    ;regs/usp/isp/msp/vbr/cacr/caar/pc/sr.w
  16483. vbreg=regs+[19*4]
  16484. sfcdfc:    dc.w 0            ;00000xxx00000yyy
  16485. fpuregs:blk.l 8*12,0        ;fp0..7:80+16bit
  16486. fpcr:    dc.l 0            ;\
  16487. fpsr:    dc.l 0            ; )union
  16488. fpiar:    dc.l 0            ;/
  16489. mmutt0:    dc.l 0            ;\
  16490. mmutt1:    dc.l 0            ; \
  16491. mmutc:    dc.l 0            ;  )union
  16492. mmusrp:    dc.l 0,0        ;  )
  16493. mmucrp:    dc.l 0,0        ; /
  16494. mmusr:    dc.w 0            ;/
  16495. mmudrp:    dc.l 0,0        ;68851 only
  16496. bmmmutc:dc.l 0            ;beermon private mmu tc
  16497. mmujbuf:dc.l 0            ;private buffer
  16498. startusp:    dc.l 0        ;prgstart
  16499. startisp:    dc.l 0        ;prgstart
  16500. startmsp:    dc.l 0        ;prgstart
  16501. startvbr:    dc.l 0        ;prgstart
  16502. startcacr:    dc.l 0        ;prgstart
  16503. startcaar:    dc.l 0        ;prgstart
  16504. startsr:    dc.w 0        ;prgstart
  16505. startsfcdfc:    dc.w 0        ;prgstart
  16506. rdff002:dc.w 0            ;prgstart union
  16507. rdff010:dc.w 0            ;prgstart   "
  16508. rdff01c:dc.w 0            ;prgstart   "
  16509. rdff01e:dc.w 0            ;prgstart   "
  16510. timeout:dc.w 0            ;prgstart a3000 ramtimeout
  16511. lastms:    dc.w 0
  16512. mousexy:dc.w 0
  16513. msxpos:    dc.w 0
  16514. msypos:    dc.w 0
  16515. msycnt:    dc.l 0
  16516. count:    dc.w 0            ;vbl timer
  16517. smdcnt:    dc.w 0
  16518. buflen:    dc.w 0
  16519. lastcmd:dc.l 0            ;1-4 chrs of last command
  16520. hililow:dc.l 0            ;lower highlight address \
  16521. hiliupp:dc.l 0            ;upper highlight address /
  16522. helpadr:dc.l 0            ;current helptext adr
  16523. bcdbuf:    dc.l 0,0,0        ;fpu reg conversion
  16524. excinstr:dc.w 0            ;except info instr
  16525. excadr:    dc.l 0            ;except info adr
  16526. exceptsr:dc.w 0            ;except info sr
  16527. exceptpc:dc.l 0            ;except info pc
  16528. excnum:    dc.b 0            ;0=no exc
  16529. cpu:    dc.b 0            ;0:68000,1:68010,2:68020,3:68030,4:68040
  16530. fpu:    dc.b 0            ;0:nofpu,1:68881,2:68882,3:68040
  16531. mmu:    dc.b 0            ;0:nommu,1:68851,2:68030mmu,3:68040mmu
  16532.     even
  16533. row:    dc.b 0            ;\
  16534. col:    dc.b 0            ;/union
  16535. rowback:dc.b 0            ;\    second screen
  16536. colback:dc.b 1            ;/union    second screen
  16537. rows:    dc.b 0            ;32:pal,24:ntsc
  16538. rowsm1:    dc.b 0            ;31:pal,23:ntsc
  16539. rowsm2:    dc.b 0            ;30:pal,22:ntsc
  16540. hilight:dc.b 0            ;0:normal,ff:inverse address
  16541. insmode:dc.b 0            ;0:overwrite,ff:insert
  16542. outmode:dc.b 0            ;0:table,1:memdump,2:asciidump
  16543. imsize:    dc.b 0            ;%00.b,%01.w,%10.l,%11.*,%100.x
  16544. dissign:dc.b %101 ;bit0:nosign/sign,bit1:hex/dez,bit2:no eaval/eaval
  16545. ea2nd:    dc.b 0            ;0:1st eavalue,ff:2nd eavalue
  16546. rmsflag:dc.b 0            ;right mouse has been pressed
  16547. bplflag:dc.b 0            ;0:medres,ff:lores
  16548. rolltop:dc.b 0            ;0:roll csdown,ff:roll csup
  16549. drvbit:    dc.b 0            ;3:df0
  16550. trk:    dc.b 0            ;trk 0-159 of sel drv
  16551. sec:    dc.b 0            ;0-10/21
  16552. hddrive:dc.b 0            ;0:dd drive,ff:hddrive
  16553. truebuf:dc.b 0            ;0:reread mfm
  16554. dskerr:    dc.b 0            ;25:datachk,21:sec not found
  16555.                 ;29:dsk removed,26:timeout
  16556. wrflag:    dc.b 0            ;0:read,ff:write
  16557. wrcmd:    dc.b 0            ;blkread/wr cmd
  16558. typeflg:dc.b 0            ;0:load,ff:type
  16559. catopt:    dc.b 0            ;bmi:noopt catalog
  16560. ffs:    dc.b 0            ;0:OFS,ff:FFS
  16561. int:    dc.b 0            ;0:AmigaDOS,ff:international filenames
  16562. valflag:dc.b 0            ;0:invalid,>0:valid bitmap
  16563. pic:    dc.b -1            ;0:no pic in dosktrkbuf
  16564. abswork:dc.b 0            ;0:memlist,-1:abolute workspace
  16565. absbuf:    dc.b 0            ;0:memlist,-1:abolute buffer,if any
  16566. smdmisc:dc.b 0
  16567. smdraw:    dc.b 0            ;0:smd data,-1:raw data
  16568. fami:    dc.b 0            ;0:smd,-1:famicon
  16569. accu8:    dc.b 0            ;0:16,-1:8 bit accu
  16570. idxy8:    dc.b 0            ;0:16,-1:8 bit index x,y
  16571. autosel:dc.b -1            ;0:normal,-1:automatic 8/16bit
  16572. keydel:    dc.b 0
  16573. repdel:    dc.b 0
  16574. crsrdel:dc.b 1
  16575. nocrsr:    dc.b 0
  16576. msdel:    dc.b 0
  16577. prvkey:    dc.b 0
  16578. ascii:    dc.b 0
  16579. dontbuf:dc.b 0            ;-1:don't buf characters
  16580. shflag:    dc.b 0
  16581. prtflag:dc.b 0
  16582. histlin:dc.b 0            ;history cursor
  16583. histcnt:dc.b 0            ;history entry
  16584. keybuf:    blk.b 40,0
  16585. month:    dc.b 31,28,31,30,31,30,31,31,30,31,30,31    ;feb gets patched
  16586.  
  16587.     ;     01234567890123456789
  16588.     even
  16589.     dc.l "PTCH"        ;patch area
  16590.     dc.b 0,0,0,0        ;reserved
  16591. econflg:dc.b 0        ;0:complete cpu,1:economy cpu
  16592. modeflg:dc.b 0        ;0:pal,1:pal lace,2:ntsc,3:ntsc lace,4:multiscan
  16593. langflg:dc.b %00000000    ;bit0:0:german,1:american
  16594.             ;bit4:0:verify,1:noverify
  16595. rateflg:dc.b 1        ;0:fast,1:medium,2:slow
  16596. rgb0:    dc.w $bbb
  16597. rgb1:    dc.w $222
  16598. fkeybuf:dc.b "l 40000 0 2 s|",0,0,0,0,0,0
  16599.     dc.b "a 40000|",0,0,0,0,0,0,0,0,0,0,0,0
  16600.     dc.b "d 40000|",0,0,0,0,0,0,0,0,0,0,0,0
  16601.     dc.b "L oi 40000|",0,0,0,0,0,0,0,0,0
  16602.     dc.b "cd:|dir|",0,0,0,0,0,0,0,0,0,0,0,0
  16603.     blk.b [10-5]*fkeylen,0
  16604.     even
  16605. lginstr:dc.l 0            ;2byte instr:0,4byte instr:2
  16606. oplen:    dc.w 0            ;0:noop,1.w,2.l,3.wl,4.ll;union!
  16607. op68000:dc.w 0,0,0,0,0        ;68000 rawopcode+paras
  16608. mask55:    dc.l $55555555
  16609. maskaa:    dc.l $aaaaaaaa
  16610. sync:    dc.w $4489
  16611. readlen:dc.w 0            ;number of mfm words incl. gap
  16612. rootkey:dc.l 0            ;key of rootblck #880/1760
  16613. lastkey:dc.l 0            ;last standard key
  16614. lastkeym1:
  16615.     dc.l 0            ;last standard key -1
  16616. trksec:    dc.w 0            ;numsec of track #11/22
  16617. trksecm1:
  16618.     dc.w 0            ;numsec of track -1 #10/21
  16619. cylsec:    dc.w 0            ;numsec of cyl #22/44
  16620. cylsecm1:
  16621.     dc.w 0            ;numsec of cyl -1 #21/43
  16622. bitsec:    dc.l 0            ;key of bitmap
  16623. fheader:dc.l 0            ;key of fileHEADER
  16624. dirkey:    dc.l 0            ;key of subdir/root
  16625. prevchain:
  16626.     dc.l 0            ;0:filehd in root,>0:previous chain
  16627. roothash:
  16628.     dc.l 0            ;absadr of filehash in root
  16629. linkkey:dc.l 0            ;0:new header into root,>0:insert key
  16630. datanum:dc.w 0            ;cnt datablk
  16631. datasiz:dc.w 0            ;ofs:488,ffs:512
  16632. filesiz:dc.l 0            ;length of file $144(fhd)
  16633. dosofs:    dc.b "DOS",0        ;bootblock entry OFS
  16634. formdos:dc.l 0            ;ofs:$444f5300,ffs:$444f5301
  16635. lastchk:dc.l 0            ;datachecksum of last rootblk
  16636. secinbuf:
  16637.     dc.l 0            ;%1:read sec before update
  16638. drivcyl:dc.l 0            ;drives:0-3,-1.b:cyl invalid
  16639. frzflag:dc.w 0            ;0:normal start,-1:freeze!
  16640. bufadr:    dc.l 0            ;adr swapmem
  16641. himem:    dc.l 0            ;max workspc end
  16642. defwork:dc.l 0            ;start of screenmem: work1/work2
  16643. scrsize:dc.l 0            ;number of bytes per screen
  16644. wrksize:dc.l 0            ;number of bytes for workspace
  16645. lineend:dc.l 0            ;end of cmdline
  16646. basereg:dc.l 0            ;effective address accu
  16647. days:    dc.l 0            ;\  days since 1.1.1978
  16648. mins:    dc.l 0            ; > mins of today
  16649. ticks:    dc.l 0            ;/  ticks of this minute
  16650. breakpc:dc.l 0            ;address of interrupted prog
  16651. para:    blk.l 16,0
  16652. intvecs:blk.l $100/4,0
  16653. brkpadr:blk.l brkpnum,0        ;pointer to brkpoint
  16654. brkpbuf:blk.w brkpnum,$4afc    ;old opcode
  16655. linebuf:blk.b xchars,0        ;even !
  16656. lineeof:dc.b 0
  16657. histbuf:blk.b histnum*[xchars-1],0
  16658.  
  16659.     even
  16660. mtchbuf:blk.l mtchnum,0        ;match buffer
  16661. txtscr:    blk.l xchars*32*2/4,0
  16662. txtback:dc.b ">"
  16663.     blk.b xchars*32*2-1," "
  16664.     even
  16665. rootblk:blk.b 512,0            ;\bootblkbuffer
  16666. header:    blk.b 512,0            ;/
  16667. bitmap:    blk.b 512,0
  16668. stacksize=$1000                ;magic
  16669. stack:    blk.b stacksize,0
  16670. stackend:
  16671. dostrkbuf:blk.b 512*11*2,0        ;hd size,even!
  16672. progend:
  16673.